]> code.delx.au - gnu-emacs/commitdiff
Fix timezone-related functions on MS-Windows
authorEli Zaretskii <eliz@gnu.org>
Thu, 4 Jun 2015 15:28:29 +0000 (18:28 +0300)
committerEli Zaretskii <eliz@gnu.org>
Thu, 4 Jun 2015 15:28:29 +0000 (18:28 +0300)
* src/editfns.c (set_time_zone_rule) [WINDOWSNT]: Always call
'xputenv', even if no reallocation of tzvalbuf was necessary.
This fixes a bug in timezone-related functions on MS-Windows.
Reported by Fabrice Popineau <fabrice.popineau@gmail.com>.

src/editfns.c

index c387dc78c7db089612c7c7e89052eb2d6636d40f..bfa67e20e3e30c12296c7480a7366ee9aa1e283d 100644 (file)
@@ -2318,7 +2318,18 @@ set_time_zone_rule (const char *tzstring)
       tzval[tzeqlen] = 0;
     }
 
-  if (new_tzvalbuf)
+  if (new_tzvalbuf
+#ifdef WINDOWSNT
+      /* MS-Windows implementation of 'putenv' copies the argument
+        string into a block it allocates, so modifying tzval string
+        does not change the environment.  OTOH, the other threads run
+        by Emacs on MS-Windows never call 'xputenv' or 'putenv' or
+        'unsetenv', so the original cause for the dicey in-place
+        modification technique doesn't exist there in the first
+        place.  */
+      || 1
+#endif
+      )
     {
       /* Although this is not thread-safe, in practice this runs only
         on startup when there is only one thread.  */