patch 9.2.0399: MS-Windows: compile warning in strptime.c

Problem:  MS-Windows: compile warning in strptime.c
          (John Marriott, after v9.2.0398)
Solution: Fix the compile warning (Yasuhiro Matsumoto).

Use _get_tzname() instead of the deprecated tzname[] global on UCRT and
MSVC builds; older MinGW (msvcrt.dll) keeps using tzname[] as a
fallback.

related: #20054
closes:  #20079

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Yasuhiro Matsumoto
2026-04-27 17:10:25 +00:00
committed by Christian Brabandt
parent 96be27309c
commit a622dda915
2 changed files with 27 additions and 4 deletions
+25 -4
View File
@@ -70,9 +70,13 @@
#define isleap_sum(a, b) \
isleap(((unsigned)(a) + (unsigned)(b)) % 400)
#ifdef _MSC_VER
# define timezone _timezone
# define tzname _tzname
/*
* _get_tzname() is provided by the UCRT and by the MSVC CRT. Older MinGW
* builds linking against msvcrt.dll fall back to the deprecated tzname[]
* global (mingw-w64 already exposes the POSIX-named tzname[]).
*/
#if defined(_UCRT) || defined(_MSC_VER)
# define USE_GET_TZNAME
#endif
/* Locale tables (English / "C" locale). */
@@ -571,10 +575,27 @@ namedzone:
continue;
}
/*
* Our current timezone
* Our current timezone. Prefer _get_tzname() over the
* tzname[] global, which UCRT marks deprecated because it
* may be inaccurate after locale changes.
*/
#ifdef USE_GET_TZNAME
{
char tzbuf[2][32];
const char *tznames[2] = { tzbuf[0], tzbuf[1] };
size_t tzlen;
_tzset();
if (_get_tzname(&tzlen, tzbuf[0], sizeof(tzbuf[0]), 0) != 0)
tzbuf[0][0] = NUL;
if (_get_tzname(&tzlen, tzbuf[1], sizeof(tzbuf[1]), 1) != 0)
tzbuf[1][0] = NUL;
ep = find_string(bp, &i, tznames, NULL, 2);
}
#else
ep = find_string(bp, &i,
(const char *const *)tzname, NULL, 2);
#endif
if (ep != NULL)
{
tm->tm_isdst = i;
+2
View File
@@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
399,
/**/
398,
/**/