about summary refs log tree commit diff
path: root/time
diff options
context:
space:
mode:
Diffstat (limited to 'time')
-rw-r--r--time/ap.c16
-rw-r--r--time/localtime.c11
-rw-r--r--time/sys/time.h3
-rw-r--r--time/tzset.c18
4 files changed, 29 insertions, 19 deletions
diff --git a/time/ap.c b/time/ap.c
index 5319763384..909ec0de73 100644
--- a/time/ap.c
+++ b/time/ap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996, 1997 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
@@ -20,11 +20,12 @@
 #include <stdlib.h>
 #include <time.h>
 #include <malloc.h>
+#include <mcheck.h>
 
 /* Prints the time in the form "hh:mm ?M", where ? is A or P.
    A simple test for strftime().  */
 int
-main (int argc, char **argv)
+main (int argc, char *argv[])
 {
   char buf[20];
   time_t t;
@@ -32,14 +33,13 @@ main (int argc, char **argv)
   mcheck (NULL);
 
   if (argc != 1)
-    fprintf(stderr, "Usage: %s\n", argv[0]);
+    fprintf (stderr, "Usage: %s\n", argv[0]);
 
-  t = time((time_t *) NULL);
-  if (strftime(buf, sizeof(buf), "%I:%M %p", localtime(&t)) == 0)
-    exit(EXIT_FAILURE);
+  t = time ((time_t *) NULL);
+  if (strftime (buf, sizeof (buf), "%I:%M %p", localtime (&t)) == 0)
+    exit (EXIT_FAILURE);
 
-  puts(buf);
+  puts (buf);
 
-  exit(EXIT_SUCCESS);
   return EXIT_SUCCESS;
 }
diff --git a/time/localtime.c b/time/localtime.c
index f228776952..ab8fc1ac45 100644
--- a/time/localtime.c
+++ b/time/localtime.c
@@ -1,5 +1,5 @@
 /* Convert `time_t' to `struct tm' in local time zone.
-   Copyright (C) 1991, 92, 93, 95, 96 Free Software Foundation, Inc.
+   Copyright (C) 1991, 92, 93, 95, 96, 97 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
@@ -25,7 +25,7 @@
 struct tm _tmbuf;
 
 /* Prototype for the internal function to get information based on TZ.  */
-extern void __tzset_internal __P ((void));
+extern void __tzset_internal __P ((int always));
 extern int __tz_compute __P ((time_t timer, struct tm *tp));
 extern int __tzfile_compute __P ((time_t timer,
 				  long int *leap_correct, int *leap_hit));
@@ -90,8 +90,8 @@ localtime (timer)
 
   __libc_lock_lock (__tzset_lock);
 
-  /* Make sure the database is initialized.  */
-  __tzset_internal ();
+  /* Update internal database according to current TZ setting.  */
+  __tzset_internal (1);
 
   result = localtime_internal (timer, &_tmbuf);
 
@@ -110,6 +110,9 @@ __localtime_r (timer, tp)
 
   __libc_lock_lock (__tzset_lock);
 
+  /* Make sure the database is initialized.  */
+  __tzset_internal (0);
+
   result = localtime_internal (timer, tp);
 
   __libc_lock_unlock (__tzset_lock);
diff --git a/time/sys/time.h b/time/sys/time.h
index f6c6f74878..5519f716ca 100644
--- a/time/sys/time.h
+++ b/time/sys/time.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 93, 94, 96 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 96, 97 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
@@ -22,6 +22,7 @@
 #include <features.h>
 
 #include <time.h>
+#include <sys/select.h>
 
 #define __need_timeval
 #include <timebits.h>
diff --git a/time/tzset.c b/time/tzset.c
index 886ac6c0c8..13360b445b 100644
--- a/time/tzset.c
+++ b/time/tzset.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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
@@ -77,15 +77,21 @@ static int compute_change __P ((tz_rule *rule, int year));
 static char *old_tz = NULL;
 
 /* Interpret the TZ envariable.  */
-void __tzset_internal __P ((void));
+void __tzset_internal __P ((int always));
 void
-__tzset_internal ()
+__tzset_internal (always)
+     int always;
 {
+  static int is_initialized = 0;
   register const char *tz;
   register size_t l;
   unsigned short int hh, mm, ss;
   unsigned short int whichrule;
 
+  if (is_initialized && !always)
+    return;
+  is_initialized = 1;
+
   /* Examine the TZ environment variable.  */
   tz = getenv ("TZ");
 
@@ -375,7 +381,7 @@ size_t __tzname_cur_max;
 long int
 __tzname_max ()
 {
-  __tzset_internal ();
+  __tzset_internal (0);
 
   return __tzname_cur_max;
 }
@@ -473,7 +479,7 @@ __tz_compute (timer, tm)
      time_t timer;
      const struct tm *tm;
 {
-  __tzset_internal ();
+  __tzset_internal (0);
 
   if (! compute_change (&tz_rules[0], 1900 + tm->tm_year) ||
       ! compute_change (&tz_rules[1], 1900 + tm->tm_year))
@@ -510,7 +516,7 @@ __tzset (void)
 {
   __libc_lock_lock (__tzset_lock);
 
-  __tzset_internal ();
+  __tzset_internal (1);
 
   if (!__use_tzfile)
     {