From: Mark Andrews Date: Tue, 26 Sep 2017 13:32:40 +0000 (+1000) Subject: 4738. [port] win32: strftime mishandles %Z. [RT #46039] X-Git-Tag: v9.12.0b1~138 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=744061a03b3c116de6f18b1569d89dd4be910161;p=thirdparty%2Fbind9.git 4738. [port] win32: strftime mishandles %Z. [RT #46039] --- diff --git a/CHANGES b/CHANGES index 80c6460f95b..acf70666db9 100644 --- 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 diff --git a/bin/dig/dig.c b/bin/dig/dig.c index 562ef79a739..43e015b88cb 100644 --- a/bin/dig/dig.c +++ b/bin/dig/dig.c @@ -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",