Port angle-bracket TZ settings to MS-Windows
* doc/lispref/os.texi (Time Zone Rules): Document MS-Windows lack of support for numeric time zone abbreviations. * src/w32.c (sys_putenv): Convert angle-bracket TZ syntax to MS-compatible syntax if possible, and to "ZZZ" otherwise. Problem reported by Kazuhiro Ito (Bug#23600).
This commit is contained in:
parent
1e5539e0b3
commit
6b985764f0
2 changed files with 31 additions and 1 deletions
|
@ -1327,7 +1327,8 @@ If it is @code{t}, the conversion uses Universal Time. If it is
|
|||
a string, the conversion uses the time zone rule equivalent to setting
|
||||
@env{TZ} to that string. If it is an integer @var{offset}, the
|
||||
conversion uses a fixed time zone with the given offset and a numeric
|
||||
abbreviation. If it is a list (@var{offset} @var{abbr}), where
|
||||
abbreviation on POSIX-compatible platforms and an unspecified abbreviation
|
||||
on MS-Windows. If it is a list (@var{offset} @var{abbr}), where
|
||||
@var{offset} is an integer number of seconds east of Universal Time
|
||||
and @var{abbr} is a string, the conversion uses a fixed time zone with
|
||||
the given offset and abbreviation.
|
||||
|
|
29
src/w32.c
29
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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue