about summary refs log tree commit diff
path: root/time
diff options
context:
space:
mode:
Diffstat (limited to 'time')
-rw-r--r--time/mktime.c40
-rw-r--r--time/strftime.c44
2 files changed, 21 insertions, 63 deletions
diff --git a/time/mktime.c b/time/mktime.c
index 673bb48266..88ac72366a 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 69babade36..3e81d2189b 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 (&lt, &tm)
+		    if (! my_strftime_localtime_r (&lt, &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 (&lt, &gtm))
+		if (! my_strftime_gmtime_r (&lt, &gtm))
 		  break;
 
 		diff = tm_diff (&ltm, &gtm);