From: Guy Harris Date: Thu, 19 Jul 2018 10:07:55 +0000 (-0700) Subject: Force FormatMessageA(). X-Git-Tag: libpcap-1.10-bp~905 X-Git-Url: https://git.tcpdump.org/libpcap/commitdiff_plain/a5341c3b81a4d7f00b5318c6d8fa8673eda81611?ds=sidebyside Force FormatMessageA(). Internally, we're using encodings in which ASCII characters are represented in a single byte, so message strings must be "ANSI", not "Unicode". Yes, that means they'll be in the current code page, which isn't necessarily - and probably isn't - UTF-8, but Windows really doesn't seem to provide much support for UTF-8 as a representation of Unicode (the current code page isn't necessarily 65001, i.e. UTF-8, especially given that some software appears to have problems with that code page on at least some versions of Windows). See GitHub issue pynetwork/pypcap#64. --- diff --git a/pcap.c b/pcap.c index 49e2a0fa..95a9f7c0 100644 --- a/pcap.c +++ b/pcap.c @@ -3252,7 +3252,7 @@ pcap_win32_err_to_str(DWORD error, char *errbuf) size_t errlen; char *p; - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, errbuf, + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, errbuf, PCAP_ERRBUF_SIZE, NULL); /* diff --git a/rpcapd/daemon.c b/rpcapd/daemon.c index b6815ac7..4bf42fde 100644 --- a/rpcapd/daemon.c +++ b/rpcapd/daemon.c @@ -1143,7 +1143,7 @@ daemon_AuthUserPwd(char *username, char *password, char *errbuf) int error; error = GetLastError(); - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, errbuf, + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, errbuf, PCAP_ERRBUF_SIZE, NULL); return -1; @@ -1156,7 +1156,7 @@ daemon_AuthUserPwd(char *username, char *password, char *errbuf) int error; error = GetLastError(); - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, errbuf, + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, errbuf, PCAP_ERRBUF_SIZE, NULL); CloseHandle(Token); diff --git a/rpcapd/win32-svc.c b/rpcapd/win32-svc.c index b5943781..8cc7dc92 100644 --- a/rpcapd/win32-svc.c +++ b/rpcapd/win32-svc.c @@ -68,7 +68,7 @@ void svc_geterr(char *str) int val; val = GetLastError(); - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, val, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR) string, PCAP_ERRBUF_SIZE, NULL); diff --git a/sockutils.c b/sockutils.c index 018ac026..ef3fe764 100644 --- a/sockutils.c +++ b/sockutils.c @@ -132,12 +132,12 @@ void sock_fmterror(const char *caller, int errcode, char *errbuf, int errbuflen) { #ifdef _WIN32 int retval; - TCHAR message[SOCK_ERRBUF_SIZE]; /* It will be char (if we're using ascii) or wchar_t (if we're using unicode) */ + char message[SOCK_ERRBUF_SIZE]; /* We're forcing "ANSI" */ if (errbuf == NULL) return; - retval = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | + retval = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, errcode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), message, sizeof(message) / sizeof(TCHAR), NULL);