changeset 14202:7acafb848e80

(Fdump_emacs): If HAVE_TZSET and not LOCALTIME_CACHE, call tzset to force a tz reload. (set_time_zone_rule): New decl. (dump_tz): New var. (main): Change TZ twice if the execution TZ happens to be the same as the dump TZ. (Fdump_emacs): Set TZ to unlikely value just before dumping.
author Richard M. Stallman <rms@gnu.org>
date Wed, 17 Jan 1996 18:03:03 +0000
parents ff372902386d
children 1343cb900552
files src/emacs.c
diffstat 1 files changed, 32 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/emacs.c	Wed Jan 17 17:54:40 1996 +0000
+++ b/src/emacs.c	Wed Jan 17 18:03:03 1996 +0000
@@ -48,6 +48,7 @@
 #endif
 
 extern void malloc_warning ();
+extern void set_time_zone_rule ();
 extern char *index ();
 extern char *strerror ();
 
@@ -315,6 +316,12 @@
 #endif /* LINK_CRTL_SHARE */
 #endif /* VMS */
 
+#ifdef HAVE_TZSET
+/* A valid but unlikely value for the TZ environment value.
+   It is OK (though a bit slower) if the user actually chooses this value.  */
+static char dump_tz[] = "UtC0";
+#endif
+
 #ifndef ORDINARY_LINK
 /* We don't include crtbegin.o and crtend.o in the link,
    so these functions and variables might be missed.
@@ -940,6 +947,23 @@
       XSETFASTINT (Vmessage_log_max, 0);
       message_dolog ("", 0, 1);
       Vmessage_log_max = old_log_max;
+
+#ifdef HAVE_TZSET
+      {
+	/* If the execution TZ happens to be the same as the dump TZ,
+	   change it to some other value and then change it back,
+	   to force the underlying implementation to reload the TZ info.
+	   This is needed on implementations that load TZ info from files,
+	   since the TZ file contents may differ between dump and execution.  */
+	char *tz = getenv ("TZ");
+	if (tz && !strcmp (tz, dump_tz))
+	  {
+	    ++*tz;
+	    tzset ();
+	    --*tz;
+	  }
+      }
+#endif
     }
 
   initialized = 1;
@@ -1329,6 +1353,14 @@
   tem = Vpurify_flag;
   Vpurify_flag = Qnil;
 
+#ifdef HAVE_TZSET
+  set_time_zone_rule (dump_tz);
+#ifndef LOCALTIME_CACHE
+  /* Force a tz reload, since set_time_zone_rule doesn't.  */
+  tzset ();
+#endif
+#endif
+
   fflush (stdout);
 #ifdef VMS
   mapout_data (XSTRING (filename)->data);