diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2003-08-14 21:59:28 +0000 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2003-08-14 21:59:28 +0000 |
commit | c68009f90028d2f69c6303cd98f08ac1d88923da (patch) | |
tree | 9a5927bf927c466e3abc38427346c45c43c64681 /lib/gettimeofday.c | |
parent | 5bac575bca7b3e6cfb669a3620436c322de954fc (diff) | |
download | gnulib-c68009f90028d2f69c6303cd98f08ac1d88923da.tar.gz |
Add wrappers for gmtime and tzset, too.
Diffstat (limited to 'lib/gettimeofday.c')
-rw-r--r-- | lib/gettimeofday.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c index 0d259be1cf..1ebe4d0ffd 100644 --- a/lib/gettimeofday.c +++ b/lib/gettimeofday.c @@ -1,7 +1,8 @@ /* Work around the bug in some systems whereby gettimeofday clobbers the static buffer that localtime uses for it's return value. The gettimeofday function from Mac OS X 10.0.4, i.e. Darwin 1.3.7 has this problem. - Copyright (C) 2001, 2002 Free Software Foundation, Inc. + The tzset replacement is necessary for at least Solaris 2.5, 2.5.1, and 2.6. + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,10 +22,12 @@ #include <config.h> -/* Disable the definitions of gettimeofday and localtime (from config.h) +/* Disable the definitions of these functions (from config.h) so we can use the library versions here. */ #undef gettimeofday +#undef gmtime #undef localtime +#undef tzset #include <sys/types.h> @@ -60,6 +63,18 @@ rpl_localtime (const time_t *timep) return tm; } +/* Same as above, since gmtime and localtime use the same buffer. */ +struct tm * +rpl_gmtime (const time_t *timep) +{ + struct tm *tm = gmtime (timep); + + if (! localtime_buffer_addr) + localtime_buffer_addr = tm; + + return tm; +} + /* This is a wrapper for gettimeofday. It is used only on systems for which gettimeofday clobbers the static buffer used for localtime's result. @@ -84,3 +99,23 @@ rpl_gettimeofday (struct timeval *tv, struct timezone *tz) return result; } + +/* This is a wrapper for tzset. It is used only on systems for which + tzset may clobber the static buffer used for localtime's result. + Save and restore the contents of the buffer used for localtime's + result around the call to tzset. */ +void +rpl_tzset (void) +{ + struct tm save; + + if (! localtime_buffer_addr) + { + time_t t = 0; + localtime_buffer_addr = localtime (&t); + } + + save = *localtime_buffer_addr; + tzset (); + *localtime_buffer_addr = save; +} |