emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 75c1f93: Simplify locale setup


From: Paul Eggert
Subject: master 75c1f93: Simplify locale setup
Date: Fri, 24 Jan 2020 02:20:35 -0500 (EST)

branch: master
commit 75c1f936fcff109e19be4abdcddd9fa2204fabca
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    Simplify locale setup
    
    Stop exporting Vprevious_system_time_locale and
    Vprevious_system_messages_locale to Elisp.  I did that export by
    mistake in 1999, and the Elisp variables have never been used.
    Simplifying this cruft should make it easier to fix Bug#39248.
    * etc/NEWS: Mention this.
    * src/emacs.c (main): Simplify locale initialization.
    (synchronize_locale): Simplify.
    (Vprevious_system_time_locale, Vprevious_system_messages_locale):
    Now static variables not visible to Lisp, and defined only if
    HAVE_SETLOCALE.
    (Vprevious_system_messages_locale): Define only if LC_MESSAGES.
---
 etc/NEWS    |  4 ++++
 src/emacs.c | 70 ++++++++++++++++++++++++++-----------------------------------
 2 files changed, 34 insertions(+), 40 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 11ef31b..764eda5 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -110,6 +110,10 @@ Formerly it made an exception for integer components of 
SOA records,
 because SOA serial numbers can exceed fixnum ranges on 32-bit platforms.
 Emacs now supports bignums so this old glitch is no longer needed.
 
+** The Lisp variables 'previous-system-messages-locale' and
+'previous-system-time-locale' have been removed, as they were created
+by mistake and were not useful to Lisp code.
+
 
 * Lisp Changes in Emacs 28.1
 
diff --git a/src/emacs.c b/src/emacs.c
index c5a760d..4b5d00a 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -930,7 +930,6 @@ main (int argc, char **argv)
      for pointers.  */
   void *stack_bottom_variable;
 
-  bool do_initial_setlocale;
   bool no_loadup = false;
   char *junk = 0;
   char *dname_arg = 0;
@@ -1235,19 +1234,17 @@ main (int argc, char **argv)
   set_binary_mode (STDOUT_FILENO, O_BINARY);
 #endif /* MSDOS */
 
-  /* Skip initial setlocale if LC_ALL is "C", as it's not needed in that case.
-     The build procedure uses this while dumping, to ensure that the
-     dumped Emacs does not have its system locale tables initialized,
-     as that might cause screwups when the dumped Emacs starts up.  */
-  {
-    char *lc_all = getenv ("LC_ALL");
-    do_initial_setlocale = ! lc_all || strcmp (lc_all, "C");
-  }
-
-  /* Set locale now, so that initial error messages are localized properly.
-     fixup_locale must wait until later, since it builds strings.  */
-  if (do_initial_setlocale)
-    setlocale (LC_ALL, "");
+  /* Set locale, so that initial error messages are localized properly.
+     However, skip this if LC_ALL is "C", as it's not needed in that case.
+     Skipping helps if dumping with unexec, to ensure that the dumped
+     Emacs does not have its system locale tables initialized, as that
+     might cause screwups when the dumped Emacs starts up.  */
+  char *lc_all = getenv ("LC_ALL");
+  if (! (lc_all && strcmp (lc_all, "C") == 0))
+    {
+      setlocale (LC_ALL, "");
+      fixup_locale ();
+    }
   text_quoting_flag = using_utf8 ();
 
   inhibit_window_system = 0;
@@ -1576,14 +1573,6 @@ Using an Emacs configured with --with-x-toolkit=lucid 
does not have this problem
   init_alloc ();
   init_bignum ();
   init_threads ();
-
-  if (do_initial_setlocale)
-    {
-      fixup_locale ();
-      Vsystem_messages_locale = Vprevious_system_messages_locale;
-      Vsystem_time_locale = Vprevious_system_time_locale;
-    }
-
   init_eval ();
   init_atimer ();
   running_asynch_code = 0;
@@ -2617,25 +2606,25 @@ synchronize_locale (int category, Lisp_Object *plocale, 
Lisp_Object desired_loca
   if (! EQ (*plocale, desired_locale))
     {
       *plocale = desired_locale;
-#ifdef WINDOWSNT
+      char const *locale_string
+       = STRINGP (desired_locale) ? SSDATA (desired_locale) : "";
+# ifdef WINDOWSNT
       /* Changing categories like LC_TIME usually requires specifying
         an encoding suitable for the new locale, but MS-Windows's
         'setlocale' will only switch the encoding when LC_ALL is
         specified.  So we ignore CATEGORY, use LC_ALL instead, and
         then restore LC_NUMERIC to "C", so reading and printing
         numbers is unaffected.  */
-      setlocale (LC_ALL, (STRINGP (desired_locale)
-                         ? SSDATA (desired_locale)
-                         : ""));
+      setlocale (LC_ALL, locale_string);
       fixup_locale ();
-#else  /* !WINDOWSNT */
-      setlocale (category, (STRINGP (desired_locale)
-                           ? SSDATA (desired_locale)
-                           : ""));
-#endif /* !WINDOWSNT */
+# else /* !WINDOWSNT */
+      setlocale (category, locale_string);
+# endif        /* !WINDOWSNT */
     }
 }
 
+static Lisp_Object Vprevious_system_time_locale;
+
 /* Set system time locale to match Vsystem_time_locale, if possible.  */
 void
 synchronize_system_time_locale (void)
@@ -2644,15 +2633,19 @@ synchronize_system_time_locale (void)
                      Vsystem_time_locale);
 }
 
+# ifdef LC_MESSAGES
+static Lisp_Object Vprevious_system_messages_locale;
+# endif
+
 /* Set system messages locale to match Vsystem_messages_locale, if
    possible.  */
 void
 synchronize_system_messages_locale (void)
 {
-#ifdef LC_MESSAGES
+# ifdef LC_MESSAGES
   synchronize_locale (LC_MESSAGES, &Vprevious_system_messages_locale,
                      Vsystem_messages_locale);
-#endif
+# endif
 }
 #endif /* HAVE_SETLOCALE */
 
@@ -2974,19 +2967,16 @@ build directory.  */);
   DEFVAR_LISP ("system-messages-locale", Vsystem_messages_locale,
               doc: /* System locale for messages.  */);
   Vsystem_messages_locale = Qnil;
-
-  DEFVAR_LISP ("previous-system-messages-locale",
-              Vprevious_system_messages_locale,
-              doc: /* Most recently used system locale for messages.  */);
+#ifdef LC_MESSAGES
   Vprevious_system_messages_locale = Qnil;
+  staticpro (&Vprevious_system_messages_locale);
+#endif
 
   DEFVAR_LISP ("system-time-locale", Vsystem_time_locale,
               doc: /* System locale for time.  */);
   Vsystem_time_locale = Qnil;
-
-  DEFVAR_LISP ("previous-system-time-locale", Vprevious_system_time_locale,
-              doc: /* Most recently used system locale for time.  */);
   Vprevious_system_time_locale = Qnil;
+  staticpro (&Vprevious_system_time_locale);
 
   DEFVAR_LISP ("before-init-time", Vbefore_init_time,
               doc: /* Value of `current-time' before Emacs begins 
initialization.  */);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]