]> sourceware.org Git - glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 11 Aug 2004 19:26:20 +0000 (19:26 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 11 Aug 2004 19:26:20 +0000 (19:26 +0000)
2004-08-11  Ulrich Drepper  <drepper@redhat.com>

* time/tzset.c (tzset_internal): Add new parameter which is
nonzero if called through tzset.  Use TZDEFAULT name including
name comparison if the new parameter is zero.  This means implicit
tzset calls will not cause files to be opened and read by tzfile.c
all the time.

2004-08-11  Jakub Jelinek  <jakub@redhat.com>

* time/tzfile.c (__tzfile_read): Free transitions only if it will
not be reused.

ChangeLog
time/tzfile.c

index 58cd9b473ebeece34c40900fbcf9f569677ac84a..459d1271a23f2e4824db8b94bba2d1066da4721c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2004-08-11  Ulrich Drepper  <drepper@redhat.com>
+
+       * time/tzset.c (tzset_internal): Add new parameter which is
+       nonzero if called through tzset.  Use TZDEFAULT name including
+       name comparison if the new parameter is zero.  This means implicit
+       tzset calls will not cause files to be opened and read by tzfile.c
+       all the time.
+
+2004-08-11  Jakub Jelinek  <jakub@redhat.com>
+
+       * time/tzfile.c (__tzfile_read): Free transitions only if it will
+       not be reused.
+
 2004-08-11  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/ieee754/dbl-64/mpa.c: Include <sys/param.h>.
index b118e07dc41dae18266b0e0c8360f0c6dad99e73..8c2756e7bbc56dfeacfd589c1123b01faaa55dfa 100644 (file)
@@ -104,16 +104,12 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
 
   __use_tzfile = 0;
 
-  if (transitions != NULL)
-    free ((void *) transitions);
-  transitions = NULL;
-
   if (file == NULL)
     /* No user specification; use the site-wide default.  */
     file = TZDEFAULT;
   else if (*file == '\0')
     /* User specified the empty string; use UTC with no leap seconds.  */
-    return;
+    goto ret_free_transitions;
   else
     {
       /* We must not allow to read an arbitrary file in a setuid
@@ -127,7 +123,7 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
              || strstr (file, "../") != NULL))
        /* This test is certainly a bit too restrictive but it should
           catch all critical cases.  */
-       return;
+       goto ret_free_transitions;
     }
 
   if (*file != '/')
@@ -156,14 +152,14 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
      disabled.  */
   f = fopen (file, "rc");
   if (f == NULL)
-    return;
+    goto ret_free_transitions;
 
   /* Get information about the file.  */
   struct stat64 st;
   if (fstat64 (fileno (f), &st) != 0)
     {
       fclose (f);
-      return;
+      goto ret_free_transitions;
     }
   if (was_using_tzfile && tzfile_ino == st.st_ino && tzfile_dev == st.st_dev)
     {
@@ -173,6 +169,9 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
       return;
     }
 
+  free ((void *) transitions);
+  transitions = NULL;
+
   /* Remember the inode and device number.  */
   tzfile_dev = st.st_dev;
   tzfile_ino = st.st_ino;
@@ -381,6 +380,9 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
 
  lose:
   fclose (f);
+ ret_free_transitions:
+  free ((void *) transitions);
+  transitions = NULL;
 }
 \f
 /* The user specified a hand-made timezone, but not its DST rules.
This page took 0.051266 seconds and 5 git commands to generate.