X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgettimeofday.c;h=0d259be1cfa54da27fe631a600ade936e25d2cd7;hb=fc66900ee825390c11719d7d3e6816c6fa94ef45;hp=f0c1d907cfa3a8383f55fa6b62ed020d93ca8236;hpb=1742cb033288a22cce9b7a0b8ddbdd37b051afd2;p=gnulib.git diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c index f0c1d907c..0d259be1c 100644 --- a/lib/gettimeofday.c +++ b/lib/gettimeofday.c @@ -1,7 +1,7 @@ /* 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 Free Software Foundation, Inc. + Copyright (C) 2001, 2002 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,9 +21,10 @@ #include -/* Disable the definition of gettimeofday (from config.h) so we can use - the library version. */ +/* Disable the definitions of gettimeofday and localtime (from config.h) + so we can use the library versions here. */ #undef gettimeofday +#undef localtime #include @@ -39,15 +40,24 @@ #endif #include -#include "gtod.h" static struct tm *localtime_buffer_addr; -void -GTOD_init (void) +/* This is a wrapper for localtime. It is used only on systems for which + gettimeofday clobbers the static buffer used for localtime's result. + + On the first call, record the address of the static buffer that + localtime uses for its result. */ + +struct tm * +rpl_localtime (const time_t *timep) { - time_t t = 0; - localtime_buffer_addr = localtime (&t); + struct tm *tm = localtime (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 @@ -63,7 +73,10 @@ rpl_gettimeofday (struct timeval *tv, struct timezone *tz) int result; if (! localtime_buffer_addr) - abort (); + { + time_t t = 0; + localtime_buffer_addr = localtime (&t); + } save = *localtime_buffer_addr; result = gettimeofday (tv, tz);