]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
strerror: honor Unicode API choice on Windows
authorJavier Blazquez <jblazquez@riotgames.com>
Thu, 24 Sep 2020 00:33:21 +0000 (17:33 -0700)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 25 Sep 2020 06:55:35 +0000 (08:55 +0200)
Closes #6005

lib/strerror.c

index 5893f49a9049359dc48b783fc093d4b96698ef25..fef5c2bcac29747087babc8f9ebea2c3865981dc 100644 (file)
@@ -44,6 +44,7 @@
 #endif
 
 #include "strerror.h"
+#include "curl_multibyte.h"
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
 #include "curl_memory.h"
@@ -661,28 +662,19 @@ get_winapi_error(int err, char *buf, size_t buflen)
 
   *buf = '\0';
 
-#ifdef _WIN32_WCE
   {
-    wchar_t wbuf[256];
+    TCHAR wbuf[256];
     wbuf[0] = L'\0';
 
     if(FormatMessage((FORMAT_MESSAGE_FROM_SYSTEM |
                       FORMAT_MESSAGE_IGNORE_INSERTS), NULL, err,
-                     LANG_NEUTRAL, wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL)) {
-      size_t written = wcstombs(buf, wbuf, buflen - 1);
-      if(written != (size_t)-1)
-        buf[written] = '\0';
-      else
-        *buf = '\0';
+                     LANG_NEUTRAL, wbuf, sizeof(wbuf)/sizeof(TCHAR), NULL)) {
+      char *msg = curlx_convert_tchar_to_UTF8(wbuf);
+      strncpy(buf, msg, buflen - 1);
+      buf[buflen-1] = '\0';
+      curlx_unicodefree(msg);
     }
   }
-#else
-  if(!FormatMessageA((FORMAT_MESSAGE_FROM_SYSTEM |
-                      FORMAT_MESSAGE_IGNORE_INSERTS), NULL, err,
-                     LANG_NEUTRAL, buf, (DWORD)buflen, NULL)) {
-    *buf = '\0';
-  }
-#endif
 
   /* Truncate multiple lines */
   p = strchr(buf, '\n');