diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2011-01-29 23:59:31 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2011-01-30 00:00:00 -0800 |
commit | ee9e39c014e2880179c91960ce1f69309d0c1500 (patch) | |
tree | 11654c2892678ea15c6fa939af91e1062bb1eb31 /m4/mktime.m4 | |
parent | 56887e878833f53c8ca55371c0e4be66388e157b (diff) | |
download | gnulib-ee9e39c014e2880179c91960ce1f69309d0c1500.tar.gz |
TYPE_MAXIMUM: avoid theoretically undefined behavior
* lib/intprops.h (TYPE_MINIMUM, TYPE_MAXIMUM): Do not shift a
negative number, which the C Standard says has undefined behavior.
In practice this is not a problem, but might as well do it by the book.
Reported by Rich Felker and Eric Blake; see
<http://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00493.html>.
* lib/strtol.c (TYPE_MINIMUM, TYPE_MAXIMUM): Likewise.
* m4/mktime.m4 (AC_FUNC_MKTIME): Likewise.
* m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise.
* m4/parse-datetime.m4 (gl_PARSE_DATETIME): Likewise.
* m4/stdint.m4 (gl_STDINT_H): Likewise.
* lib/mktime.c (TYPE_MAXIMUM): Redo slightly to match the others.
Diffstat (limited to 'm4/mktime.m4')
-rw-r--r-- | m4/mktime.m4 | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/m4/mktime.m4 b/m4/mktime.m4 index 7836b76acb..56b2416d61 100644 --- a/m4/mktime.m4 +++ b/m4/mktime.m4 @@ -1,4 +1,4 @@ -# serial 18 +# serial 19 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2011 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation @@ -175,12 +175,13 @@ main () time_t_max = (! time_t_signed ? (time_t) -1 - : ~ (~ (time_t) 0 << (sizeof (time_t) * CHAR_BIT - 1))); + : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) + * 2 + 1)); time_t_min = (! time_t_signed ? (time_t) 0 : time_t_signed_magnitude ? ~ (time_t) 0 - : ~ (time_t) 0 << (sizeof (time_t) * CHAR_BIT - 1)); + : ~ time_t_max); delta = time_t_max / 997; /* a suitable prime number */ for (i = 0; i < N_STRINGS; i++) |