.
[gnulib.git] / lib / mktime.c
index 7020513..b2e6387 100644 (file)
@@ -1,4 +1,4 @@
-/* mktime: convert a `struct tm' to a time_t value  zzzzzz
+/* mktime: convert a `struct tm' to a time_t value
    Copyright (C) 1993-1997, 1998 Free Software Foundation, Inc.
    Contributed by Paul Eggert (eggert@twinsun.com).
 
 # 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 _REENTRANT
-# define _REENTRANT 1
-#endif
-
-
 #ifdef _LIBC
 # define HAVE_LIMITS_H 1
-# define HAVE_LOCALTIME_R 1
 # define STDC_HEADERS 1
 #endif
 
@@ -130,35 +119,21 @@ 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;
+my_mktime_localtime_r (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 */
 
 
@@ -169,9 +144,8 @@ my_mktime_localtime_r (t, tp)
    If TP is null, return a nonzero value.
    If overflow occurs, yield the low order bits of the correct answer.  */
 static time_t
-ydhms_tm_diff (year, yday, hour, min, sec, tp)
-     int year, yday, hour, min, sec;
-     const struct tm *tp;
+ydhms_tm_diff (int year, int yday, int hour, int min, int sec,
+              const struct tm *tp)
 {
   if (!tp)
     return 1;
@@ -203,8 +177,7 @@ static time_t localtime_offset;
 
 /* Convert *TP to a time_t value.  */
 time_t
-mktime (tp)
-     struct tm *tp;
+mktime (struct tm *tp)
 {
 #ifdef _LIBC
   /* POSIX.1 8.1.1 requires that whenever mktime() is called, the
@@ -213,17 +186,15 @@ 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.
    If *T is out of range for conversion, adjust it so that
    it is the nearest in-range value and then convert that.  */
 static struct tm *
-ranged_convert (convert, t, tp)
-     struct tm *(*convert) __P ((const time_t *, struct tm *));
-     time_t *t;
-     struct tm *tp;
+ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
+               time_t *t, struct tm *tp)
 {
   struct tm *r;
 
@@ -270,10 +241,9 @@ ranged_convert (convert, t, tp)
    compared to what the result would be for UTC without leap seconds.
    If *OFFSET's guess is correct, only one CONVERT call is needed.  */
 time_t
-__mktime_internal (tp, convert, offset)
-     struct tm *tp;
-     struct tm *(*convert) __P ((const time_t *, struct tm *));
-     time_t *offset;
+__mktime_internal (struct tm *tp,
+                  struct tm *(*convert) (const time_t *, struct tm *),
+                  time_t *offset)
 {
   time_t t, dt, t0, t1, t2;
   struct tm tm;
@@ -559,6 +529,6 @@ main (argc, argv)
 \f
 /*
 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:
 */