diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2016-05-01 11:44:51 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2016-05-01 17:27:02 -0700 |
commit | b28c2cda0e90ccad85a99c48dded5624e39d28ac (patch) | |
tree | efcd4824fbd894bb15b10c43bd20e2258ebc3870 /lib/timegm.c | |
parent | 6ed53f13bc39d9a0252549e98a2a59441fb2351f (diff) | |
download | gnulib-b28c2cda0e90ccad85a99c48dded5624e39d28ac.tar.gz |
Port mktime_internal offset to unsigned time_t
This avoids some assumptions about wraparound arithmetic on
signed integer overflow.
* lib/mktime-internal.h (mktime_offset_t): New type.
(mktime_internal): Use it in decl.
* lib/mktime.c, lib/timegm.c (mktime_offset_t) [_LIBC]: New type.
* lib/mktime.c (__mktime_internal, localtime_offset):
* lib/timegm.c (timegm): Use it.
* m4/mktime.m4 (gl_TIME_T_IS_SIGNED): New macro.
(gl_FUNC_MKTIME): Require it.
Diffstat (limited to 'lib/timegm.c')
-rw-r--r-- | lib/timegm.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/timegm.c b/lib/timegm.c index 1f567ec63d..ee9e497827 100644 --- a/lib/timegm.c +++ b/lib/timegm.c @@ -22,7 +22,9 @@ #include <time.h> -#ifndef _LIBC +#ifdef _LIBC +typedef time_t mktime_offset_t; +#else # undef __gmtime_r # define __gmtime_r gmtime_r # define __mktime_internal mktime_internal @@ -32,7 +34,7 @@ time_t timegm (struct tm *tmp) { - static time_t gmtime_offset; + static mktime_offset_t gmtime_offset; tmp->tm_isdst = 0; return __mktime_internal (tmp, __gmtime_r, &gmtime_offset); } |