diff --git a/src/common/impl/debug_windows.c b/src/common/impl/debug_windows.c index 3789b7659..8bcfe5311 100644 --- a/src/common/impl/debug_windows.c +++ b/src/common/impl/debug_windows.c @@ -1,16 +1,18 @@ #include "common/debug.h" +#include "common/windows/nt.h" #include const char* ffDebugWin32Error(DWORD errorCode) { - static char buffer[256]; + static char buffer[512]; - DWORD len = FormatMessageA( + wchar_t bufferW[256]; + ULONG len = FormatMessageW( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, (DWORD) errorCode, 0, - buffer, + bufferW, sizeof(buffer), NULL); @@ -18,10 +20,15 @@ const char* ffDebugWin32Error(DWORD errorCode) { snprintf(buffer, sizeof(buffer), "Unknown error code (%lu)", errorCode); } else { // Remove trailing newline - while (len > 0 && (buffer[len - 1] == '\r' || buffer[len - 1] == '\n')) { - buffer[--len] = '\0'; + while (len > 0 && (bufferW[len - 1] == '\r' || bufferW[len - 1] == '\n')) { + --len; + } + + if (NT_SUCCESS(RtlUnicodeToUTF8N(buffer, sizeof(buffer), &len, bufferW, len * sizeof(wchar_t)))) { + snprintf(buffer + len, sizeof(buffer) - len, " (%lu)", errorCode); + } else { + snprintf(buffer, sizeof(buffer), "Unknown error (%lu)", errorCode); } - snprintf(buffer + len, sizeof(buffer) - len + 2, " (%lu)", errorCode); } return buffer;