summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--time/Makefile3
-rw-r--r--time/tzfile.c10
-rw-r--r--time/tzset.c64
4 files changed, 48 insertions, 38 deletions
diff --git a/ChangeLog b/ChangeLog
index 5929b2f59e..bdb63691aa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Sun Jun 16 00:40:20 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
+
+	* time/Makefile ($(installed-localtime-file)): If target exists, do
+	nothing but print a message; if not, make it an absolute symlink.
+
+	* time/tzset.c (__tzset): After stripping leading :, call
+	__tzfile_read on TZ even if it's empty or null.
+	* time/tzfile.c (__tzfile_read): Use "Universal" if passed "".
+
 Sat Jun 15 18:13:43 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
 
 	* hurd/Makefile (routines): Add get-host, set-host.
diff --git a/time/Makefile b/time/Makefile
index 3d8240c7ae..f1bf761b40 100644
--- a/time/Makefile
+++ b/time/Makefile
@@ -119,7 +119,8 @@ target-zone-flavor = $(filter /posix /right, \
 
 ifdef localtime
 $(installed-localtime-file): $(zonedir)/$(localtime) $(objpfx)zic
-	$(zic-cmd) -l $(localtime)
+	if test -r $@; then echo Site timezone NOT reset to Factory.; else \
+	ln -s -f $< $@; fi
 endif
 ifdef posixrules
 $(installed-posixrules-file): $(zonedir)/$(posixrules) $(objpfx)zic
diff --git a/time/tzfile.c b/time/tzfile.c
index e78a05ec75..332ed46c33 100644
--- a/time/tzfile.c
+++ b/time/tzfile.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 95, 96 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
@@ -103,8 +103,12 @@ DEFUN(__tzfile_read, (file), CONST char *file)
     free((PTR) leaps);
   leaps = NULL;
 
-  if (file == NULL || *file == '\0')
+  if (file == NULL)
+    /* No user specification; use the site-wide default.  */
     file = TZDEFAULT;
+  else if (*file == '\0')
+    /* User specified the empty string; use UTC explicitly.  */
+    file = "Universal";
 
   if (*file != '/')
     {
@@ -224,7 +228,7 @@ DEFUN(__tzfile_read, (file), CONST char *file)
   (void) fclose(f);
 
   compute_tzname_max (chars);
-  
+
   __use_tzfile = 1;
   return;
 
diff --git a/time/tzset.c b/time/tzset.c
index 5f949dce5f..d3a33dc1ce 100644
--- a/time/tzset.c
+++ b/time/tzset.c
@@ -99,45 +99,41 @@ DEFUN_VOID(__tzset)
   /* Examine the TZ environment variable.  */
   tz = getenv ("TZ");
 
-  if (tz != NULL)
+  /* A leading colon means "implementation defined syntax".
+     We ignore the colon and always use the same algorithm:
+     try a data file, and if none exists parse the 1003.1 syntax.  */
+  if (tz && *tz == ':')
+    ++tz;
+
+  /* Try to read a data file.  */
+  __tzfile_read (tz);
+  if (__use_tzfile)
     {
-      /* A leading colon means "implementation defined syntax".
-	 We ignore the colon and always use the same algorithm:
-	 try a data file, and if none exists parse the 1003.1 syntax.  */
-      if (*tz == ':')
-	++tz;
-
-      __tzfile_read (tz);
-      if (__use_tzfile)
-	{
-	  __tzset_run = 1;
-	  return;
-	}
+      __tzset_run = 1;
+      return;
     }
 
+  /* No data file found.  Default to UTC if nothing specified.  */
+
   if (tz == NULL || *tz == '\0')
     {
-      __tzfile_read((char *) NULL);
-      if (!__use_tzfile)
-	{
-	  const char UTC[] = "UTC";
-	  size_t len = sizeof UTC;
-	  tz_rules[0].name = (char *) malloc(len);
-	  if (tz_rules[0].name == NULL)
-	    return;
-	  tz_rules[1].name = (char *) malloc(len);
-	  if (tz_rules[1].name == NULL)
-	    return;
-	  memcpy ((PTR) tz_rules[0].name, UTC, len);
-	  memcpy ((PTR) tz_rules[1].name, UTC, len);
-	  tz_rules[0].type = tz_rules[1].type = J0;
-	  tz_rules[0].m = tz_rules[0].n = tz_rules[0].d = 0;
-	  tz_rules[1].m = tz_rules[1].n = tz_rules[1].d = 0;
-	  tz_rules[0].secs = tz_rules[1].secs = 0;
-	  tz_rules[0].offset = tz_rules[1].offset = 0L;
-	  tz_rules[0].change = tz_rules[1].change = (time_t) -1;
-	  tz_rules[0].computed_for = tz_rules[1].computed_for = 0;
-	}
+      static const char UTC[] = "UTC";
+      size_t len = sizeof UTC;
+      tz_rules[0].name = (char *) malloc(len);
+      if (tz_rules[0].name == NULL)
+	return;
+      tz_rules[1].name = (char *) malloc(len);
+      if (tz_rules[1].name == NULL)
+	return;
+      memcpy ((PTR) tz_rules[0].name, UTC, len);
+      memcpy ((PTR) tz_rules[1].name, UTC, len);
+      tz_rules[0].type = tz_rules[1].type = J0;
+      tz_rules[0].m = tz_rules[0].n = tz_rules[0].d = 0;
+      tz_rules[1].m = tz_rules[1].n = tz_rules[1].d = 0;
+      tz_rules[0].secs = tz_rules[1].secs = 0;
+      tz_rules[0].offset = tz_rules[1].offset = 0L;
+      tz_rules[0].change = tz_rules[1].change = (time_t) -1;
+      tz_rules[0].computed_for = tz_rules[1].computed_for = 0;
       __tzset_run = 1;
       return;
     }