1
0
mirror of https://https.git.savannah.gnu.org/git/gnulib.git synced 2026-09-01 02:34:55 +00:00

mktime: clarify long_int width checking

* lib/mktime.c (long_int_is_wide_enough): Move this assertion to
the top level, to make it clearer that the assumption about
long_int width is being checked.  See
<http://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00554.html>.
This commit is contained in:
Paul Eggert
2011-01-30 09:36:23 -08:00
parent 13f7694978
commit 3d3eb66307
2 changed files with 13 additions and 6 deletions
+8
View File
@@ -1,3 +1,11 @@
2011-01-30 Paul Eggert <eggert@cs.ucla.edu>
mktime: clarify long_int width checking
* lib/mktime.c (long_int_is_wide_enough): Move this assertion to
the top level, to make it clearer that the assumption about
long_int width is being checked. See
<http://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00554.html>.
2011-01-30 Simon Josefsson <simon@josefsson.org>
ignore-value: Fix self-test.
+5 -6
View File
@@ -64,12 +64,16 @@
# define mktime my_mktime
#endif /* DEBUG */
/* Verify a requirement at compile-time (unlike assert, which is runtime). */
#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
/* A signed type that is at least one bit wider than int. */
#if INT_MAX <= LONG_MAX / 2
typedef long int long_int;
#else
typedef long long int long_int;
#endif
verify (long_int_is_wide_enough, INT_MAX == INT_MAX * (long_int) 2 / 2);
/* Shift A right by B bits portably, by dividing A by 2**B and
truncating towards minus infinity. A and B should be free of side
@@ -123,9 +127,6 @@ typedef long long int long_int;
#endif
#define TIME_T_MIDPOINT (SHR (TIME_T_MIN + TIME_T_MAX, 1) + 1)
/* Verify a requirement at compile-time (unlike assert, which is runtime). */
#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
verify (time_t_is_integer, TYPE_IS_INTEGER (time_t));
verify (twos_complement_arithmetic,
(TYPE_TWOS_COMPLEMENT (int)
@@ -196,8 +197,6 @@ ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1,
int year0, int yday0, int hour0, int min0, int sec0)
{
verify (C99_integer_division, -1 / 2 == 0);
verify (long_int_year_and_yday_are_wide_enough,
INT_MAX == INT_MAX * (long_int) 2 / 2);
/* Compute intervening leap days correctly even if year is negative.
Take care to avoid integer overflow here. */
@@ -733,6 +732,6 @@ main (int argc, char **argv)
/*
Local Variables:
compile-command: "gcc -DDEBUG -Wall -W -O2 -g mktime.c -o mktime"
compile-command: "gcc -DDEBUG -I. -Wall -W -O2 -g mktime.c -o mktime"
End:
*/