summaryrefslogtreecommitdiff
path: root/lib/timegm.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2016-05-01 11:44:51 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2016-05-01 17:27:02 -0700
commitb28c2cda0e90ccad85a99c48dded5624e39d28ac (patch)
treeefcd4824fbd894bb15b10c43bd20e2258ebc3870 /lib/timegm.c
parent6ed53f13bc39d9a0252549e98a2a59441fb2351f (diff)
downloadgnulib-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.c6
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);
}