diff options
Diffstat (limited to 'time')
-rw-r--r-- | time/mktime.c | 40 | ||||
-rw-r--r-- | time/strftime.c | 44 |
2 files changed, 21 insertions, 63 deletions
diff --git a/time/mktime.c b/time/mktime.c index 673bb48..88ac723 100644 --- a/time/mktime.c +++ b/time/mktime.c @@ -25,18 +25,8 @@ # include <config.h> #endif -/* Some systems require that one of these symbols be defined in - order to declare localtime_r properly. */ -#ifndef __EXTENSIONS__ -# define __EXTENSIONS__ 1 -#endif -#ifndef _POSIX_THREAD_SAFE_FUNCTIONS -# define _POSIX_THREAD_SAFE_FUNCTIONS 1 -#endif - #ifdef _LIBC # define HAVE_LIMITS_H 1 -# define HAVE_LOCALTIME_R 1 # define STDC_HEADERS 1 #endif @@ -47,12 +37,6 @@ # define LEAP_SECONDS_POSSIBLE 1 #endif -/* Some systems require <unistd.h> to be included before <time.h> - for localtime_r to be declared properly. */ -#if HAVE_UNISTD_H -# include <unistd.h> -#endif - #include <sys/types.h> /* Some systems define `time_t' here. */ #include <time.h> @@ -132,35 +116,23 @@ time_t __mktime_internal __P ((struct tm *, #ifdef _LIBC -# define localtime_r __localtime_r +# define my_mktime_localtime_r __localtime_r #else -# if HAVE_LOCALTIME_R == defined localtime_r -/* Provide our own substitute for a missing or possibly broken localtime_r. */ +/* If we're a mktime substitute in a GNU program, then prefer + localtime to localtime_r, since many localtime_r implementations + are buggy. */ static struct tm *my_mktime_localtime_r __P ((const time_t *, struct tm *)); static struct tm * my_mktime_localtime_r (t, tp) const time_t *t; struct tm *tp; { -# ifdef localtime_r - /* Digital Unix 4.0A and 4.0D have a macro localtime_r with the - standard meaning, along with an unwanted, nonstandard function - localtime_r. The placeholder function my_mktime_localtime_r - invokes the macro; use that instead of the system's bogus - localtime_r. */ - return localtime_r (t, tp); -# undef localtime_r -# else /* ! defined (localtime_r) */ - /* Approximate localtime_r as best we can in its absence. */ struct tm *l = localtime (t); if (! l) return 0; *tp = *l; return tp; -# endif /* ! defined localtime_r */ } -# define localtime_r my_mktime_localtime_r -# endif /* HAVE_LOCALTIME_R == defined localtime_r */ #endif /* ! _LIBC */ @@ -215,7 +187,7 @@ mktime (tp) __tzset (); #endif - return __mktime_internal (tp, localtime_r, &localtime_offset); + return __mktime_internal (tp, my_mktime_localtime_r, &localtime_offset); } /* Use CONVERT to convert *T to a broken down time in *TP. @@ -565,6 +537,6 @@ main (argc, argv) /* Local Variables: -compile-command: "gcc -DDEBUG -D__EXTENSIONS__ -DHAVE_LIMITS_H -DHAVE_LOCALTIME_R -DSTDC_HEADERS -Wall -W -O -g mktime.c -o mktime" +compile-command: "gcc -DDEBUG -DHAVE_LIMITS_H -DSTDC_HEADERS -Wall -W -O -g mktime.c -o mktime" End: */ diff --git a/time/strftime.c b/time/strftime.c index 69babad..3e81d21 100644 --- a/time/strftime.c +++ b/time/strftime.c @@ -20,11 +20,6 @@ # include <config.h> #endif -/* Some hosts need this in order to declare localtime_r properly. */ -#ifndef __EXTENSIONS__ -# define __EXTENSIONS__ 1 -#endif - #ifdef _LIBC # define HAVE_LIMITS_H 1 # define HAVE_MBLEN 1 @@ -46,12 +41,6 @@ #include <ctype.h> #include <sys/types.h> /* Some systems define `time_t' here. */ -/* Some systems require <unistd.h> to be included before <time.h> - for localtime_r to be declared properly. */ -#if HAVE_UNISTD_H -# include <unistd.h> -#endif - #ifdef TIME_WITH_SYS_TIME # include <sys/time.h> # include <time.h> @@ -153,19 +142,20 @@ extern char *tzname[]; #ifdef _LIBC -# define gmtime_r __gmtime_r -# define localtime_r __localtime_r +# define my_strftime_gmtime_r __gmtime_r +# define my_strftime_localtime_r __localtime_r # define tzname __tzname # define tzset __tzset #else -# if ! HAVE_LOCALTIME_R -# if ! HAVE_TM_GMTOFF -/* Approximate gmtime_r as best we can in its absence. */ -# undef gmtime_r -# define gmtime_r my_gmtime_r -static struct tm *gmtime_r __P ((const time_t *, struct tm *)); + +/* If we're a strftime substitute in a GNU program, then prefer gmtime + to gmtime_r, since many gmtime_r implementations are buggy. + Similarly for localtime_r. */ + +# if ! HAVE_TM_GMTOFF +static struct tm *my_strftime_gmtime_r __P ((const time_t *, struct tm *)); static struct tm * -gmtime_r (t, tp) +my_strftime_gmtime_r (t, tp) const time_t *t; struct tm *tp; { @@ -175,14 +165,11 @@ gmtime_r (t, tp) *tp = *l; return tp; } -# endif /* ! HAVE_TM_GMTOFF */ +# endif /* ! HAVE_TM_GMTOFF */ -/* Approximate localtime_r as best we can in its absence. */ -# undef localtime_r -# define localtime_r my_ftime_localtime_r -static struct tm *localtime_r __P ((const time_t *, struct tm *)); +static struct tm *my_strftime_localtime_r __P ((const time_t *, struct tm *)); static struct tm * -localtime_r (t, tp) +my_strftime_localtime_r (t, tp) const time_t *t; struct tm *tp; { @@ -192,7 +179,6 @@ localtime_r (t, tp) *tp = *l; return tp; } -# endif /* ! HAVE_LOCALTIME_R */ #endif /* ! defined _LIBC */ @@ -1203,7 +1189,7 @@ my_strftime (s, maxsize, format, tp ut_argument) occurred. */ struct tm tm; - if (! localtime_r (<, &tm) + if (! my_strftime_localtime_r (<, &tm) || ((ltm.tm_sec ^ tm.tm_sec) | (ltm.tm_min ^ tm.tm_min) | (ltm.tm_hour ^ tm.tm_hour) @@ -1213,7 +1199,7 @@ my_strftime (s, maxsize, format, tp ut_argument) break; } - if (! gmtime_r (<, >m)) + if (! my_strftime_gmtime_r (<, >m)) break; diff = tm_diff (<m, >m); |