update from main archive 960825 libc-960826
authordrepper <drepper>
Mon, 26 Aug 1996 00:43:29 +0000 (00:43 +0000)
committerdrepper <drepper>
Mon, 26 Aug 1996 00:43:29 +0000 (00:43 +0000)
time/gmtime.c
time/strftime.c

index 93fba65..364b4c9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1993, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1993, 1995, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -16,7 +16,6 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
-#include <ansidecl.h>
 #include <stddef.h>
 #include <time.h>
 
@@ -25,16 +24,19 @@ extern struct tm _tmbuf;
 
 /* Return the `struct tm' representation of *T in UTC. */
 struct tm *
-DEFUN(gmtime, (t), CONST time_t *t)
+gmtime (t)
+     const time_t *t;
 {
   return __gmtime_r (t, &_tmbuf);
 }
 
+
 /* Return the `struct tm' representation of *T in UTC,
    using *TP to store the result.  */
 struct tm *
-DEFUN(__gmtime_r, (t, tp),
-      CONST time_t *t AND struct tm *tp)
+__gmtime_r (t, tp)
+     const time_t *t;
+     struct tm *tp;
 {
   __offtime (t, 0L, tp);
 
index 214f82f..129fd14 100644 (file)
@@ -470,27 +470,37 @@ strftime (s, maxsize, format, tp)
        case 'z':
          {
            struct tm tml = *tp;
-           time_t t = mktime (&tml);
            struct tm tmg;
+           time_t t;
+           time_t offset = 0;
            int diff;
 
-           tml = *localtime (&t);      /* Canonicalize the local time.  */
-           tmg = *gmtime (&t);
+           t = __mktime_internal (&tml, __localtime_r, &offset);
 
-           /* Compute the difference.  */
-           diff = tml.tm_min - tmg.tm_min;
-           diff += 60 * (tml.tm_hour - tmg.tm_hour);
-
-           if (tml.tm_mon != tmg.tm_mon)
+           /* Canonicalize the local time.  */
+           if (t == (time_t) -1 || __localtime_r (&t, &tml) == NULL)
+             /* We didn't managed to get the local time.  Assume it
+                GMT as a reasonable default value.  */
+             diff = 0;
+           else
              {
-               /* We assume no timezone differs from UTC by more than
-                  +- 23 hours.  This should be safe.  */
-               if (tmg.tm_mday == 1)
-                 tml.tm_mday = 0;
-               else /* tml.tm_mday == 1 */
-                 tmg.tm_mday = 0;
+               __gmtime_r (&t, &tmg);
+
+               /* Compute the difference.  */
+               diff = tml.tm_min - tmg.tm_min;
+               diff += 60 * (tml.tm_hour - tmg.tm_hour);
+
+               if (tml.tm_mon != tmg.tm_mon)
+                 {
+                   /* We assume no timezone differs from UTC by more
+                      than +- 23 hours.  This should be safe.  */
+                   if (tmg.tm_mday == 1)
+                     tml.tm_mday = 0;
+                   else /* tml.tm_mday == 1 */
+                     tmg.tm_mday = 0;
+                 }
+               diff += 1440 * (tml.tm_mday - tmg.tm_mday);
              }
-           diff += 1440 * (tml.tm_mday - tmg.tm_mday);
 
            if (diff < 0)
              {