]> code.delx.au - gnu-emacs/blobdiff - src/w32.c
Remove now-inaccurate bytecode comments
[gnu-emacs] / src / w32.c
index 442ce79b23cd7ae564dbfd4f546ab521bbe2f3ca..71a38b91946d94ca8f94fb4cf165d21059d90360 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -2505,6 +2505,35 @@ sys_putenv (char *str)
       return unsetenv (str);
     }
 
+  if (strncmp (str, "TZ=<", 4) == 0)
+    {
+      /* MS-Windows does not support POSIX.1-2001 angle-bracket TZ
+        abbreviation syntax.  Convert to POSIX.1-1988 syntax if possible,
+        and to the undocumented placeholder "ZZZ" otherwise.  */
+      bool supported_abbr = true;
+      for (char *p = str + 4; *p; p++)
+       {
+         if (('0' <= *p && *p <= '9') || *p == '-' || *p == '+')
+           supported_abbr = false;
+         else if (*p == '>')
+           {
+             ptrdiff_t abbrlen;
+             if (supported_abbr)
+               {
+                 abbrlen = p - (str + 4);
+                 memmove (str + 3, str + 4, abbrlen);
+               }
+             else
+               {
+                 abbrlen = 3;
+                 memset (str + 3, 'Z', abbrlen);
+               }
+             memmove (str + 3 + abbrlen, p + 1, strlen (p));
+             break;
+           }
+       }
+    }
+
   return _putenv (str);
 }