]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4738. [port] win32: strftime mishandles %Z. [RT #46039]
authorMark Andrews <marka@isc.org>
Tue, 26 Sep 2017 13:32:40 +0000 (23:32 +1000)
committerMark Andrews <marka@isc.org>
Tue, 26 Sep 2017 13:32:40 +0000 (23:32 +1000)
CHANGES
bin/dig/dig.c

diff --git a/CHANGES b/CHANGES
index 80c6460f95b95e83d247118a4262204931134a98..acf70666db97929afc695ac1c3492118e726aa93 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+4738.  [port]          win32: strftime mishandles %Z. [RT #46039]
+
 4737.  [cleanup]       Address Coverity warnings. [RT #46012]
 
 4736.  [cleanup]       (a) Added comments to NSEC3-related functions in
index 562ef79a73940e974317fbd80452e492d56d396e..43e015b88cb125a50c52b8516f4e2d092617073e 100644 (file)
@@ -231,7 +231,11 @@ received(int bytes, isc_sockaddr_t *from, dig_query_t *query) {
        isc_uint64_t diff;
        time_t tnow;
        struct tm tmnow;
+#ifdef WIN32
+       wchar_t time_str[100];
+#else
        char time_str[100];
+#endif
        char fromtext[ISC_SOCKADDR_FORMATSIZE];
 
        isc_sockaddr_format(from, fromtext, sizeof(fromtext));
@@ -250,9 +254,19 @@ received(int bytes, isc_sockaddr_t *from, dig_query_t *query) {
                tmnow  = *localtime(&tnow);
 #endif
 
+#ifdef WIN32
+               /*
+                * On Windows, time zone name ("%Z") may be a localized
+                * wide-character string, which strftime() handles incorrectly.
+                */
+               if (wcsftime(time_str, sizeof(time_str)/sizeof(time_str[0]),
+                            "%a %b %d %H:%M:%S %Z %Y", &tmnow) > 0U)
+                       printf(";; WHEN: %ls\n", time_str);
+#else
                if (strftime(time_str, sizeof(time_str),
                             "%a %b %d %H:%M:%S %Z %Y", &tmnow) > 0U)
                        printf(";; WHEN: %s\n", time_str);
+#endif
                if (query->lookup->doing_xfr) {
                        printf(";; XFR size: %u records (messages %u, "
                               "bytes %" ISC_PRINT_QUADFORMAT "u)\n",