Skip to content

Commit 39cfc7a

Browse files
committed
Debug (Windows): ensures UTF-8 output
1 parent 44af8b8 commit 39cfc7a

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/common/impl/debug_windows.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,34 @@
11
#include "common/debug.h"
2+
#include "common/windows/nt.h"
23

34
#include <windows.h>
45

56
const char* ffDebugWin32Error(DWORD errorCode) {
6-
static char buffer[256];
7+
static char buffer[512];
78

8-
DWORD len = FormatMessageA(
9+
wchar_t bufferW[256];
10+
ULONG len = FormatMessageW(
911
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
1012
NULL,
1113
(DWORD) errorCode,
1214
0,
13-
buffer,
15+
bufferW,
1416
sizeof(buffer),
1517
NULL);
1618

1719
if (len == 0) {
1820
snprintf(buffer, sizeof(buffer), "Unknown error code (%lu)", errorCode);
1921
} else {
2022
// Remove trailing newline
21-
while (len > 0 && (buffer[len - 1] == '\r' || buffer[len - 1] == '\n')) {
22-
buffer[--len] = '\0';
23+
while (len > 0 && (bufferW[len - 1] == '\r' || bufferW[len - 1] == '\n')) {
24+
--len;
25+
}
26+
27+
if (NT_SUCCESS(RtlUnicodeToUTF8N(buffer, sizeof(buffer), &len, bufferW, len * sizeof(wchar_t)))) {
28+
snprintf(buffer + len, sizeof(buffer) - len, " (%lu)", errorCode);
29+
} else {
30+
snprintf(buffer, sizeof(buffer), "Unknown error (%lu)", errorCode);
2331
}
24-
snprintf(buffer + len, sizeof(buffer) - len + 2, " (%lu)", errorCode);
2532
}
2633

2734
return buffer;

0 commit comments

Comments
 (0)