]> code.delx.au - gnu-emacs/commitdiff
Avoid setting LC_NUMERIC on MS-Windows to anything but "C"
authorEli Zaretskii <eliz@gnu.org>
Mon, 10 Aug 2015 17:01:31 +0000 (20:01 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 10 Aug 2015 17:01:31 +0000 (20:01 +0300)
* src/emacs.c (synchronize_locale) [WINDOWSNT]: Call fixup_locale
after setting LC_ALL to the desired locale, to avoid affecting how
numbers are read and printed.  (Bug#21223)

src/emacs.c

index 6e35496eb8ab84e38d116ad47453a0d3dbba4381..aace618b300f34cb55bd2d388965425c61a3ea45 100644 (file)
@@ -2154,17 +2154,23 @@ synchronize_locale (int category, Lisp_Object *plocale, Lisp_Object desired_loca
 {
   if (! EQ (*plocale, desired_locale))
     {
+      *plocale = desired_locale;
 #ifdef WINDOWSNT
       /* Changing categories like LC_TIME usually requires to specify
         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 and use LC_ALL instead.  */
-      category = LC_ALL;
-#endif
-      *plocale = desired_locale;
+        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)
+                         : ""));
+      fixup_locale ();
+#else  /* !WINDOWSNT */
       setlocale (category, (STRINGP (desired_locale)
                            ? SSDATA (desired_locale)
                            : ""));
+#endif /* !WINDOWSNT */
     }
 }