]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.2.0399: MS-Windows: compile warning in strptime.c v9.2.0399
authorYasuhiro Matsumoto <mattn.jp@gmail.com>
Mon, 27 Apr 2026 17:10:25 +0000 (17:10 +0000)
committerChristian Brabandt <cb@256bit.org>
Mon, 27 Apr 2026 17:10:25 +0000 (17:10 +0000)
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>
src/strptime.c
src/version.c

index ca6fcd8a992085b9956ce242a2a2d74897452754..0d1663cf03fbaf7c595657d0028c13e18cea026e 100644 (file)
 #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;
index fc2cb3b8dbfb59b8f995ed0f51c51b3d5186466d..45415395531e3723c6fdd097b57a0cefb346b70a 100644 (file)
@@ -729,6 +729,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    399,
 /**/
     398,
 /**/