Files
fastfetch/src/common/impl/debug_windows.c
T

56 lines
1.4 KiB
C
Raw Normal View History

2026-01-06 09:48:38 +08:00
#include "common/debug.h"
2026-04-05 19:32:33 +08:00
#include "common/windows/nt.h"
#include <windows.h>
2026-03-29 09:28:49 +08:00
const char* ffDebugWin32Error(DWORD errorCode) {
2026-04-05 19:32:33 +08:00
static char buffer[512];
2026-04-05 19:32:33 +08:00
wchar_t bufferW[256];
ULONG len = FormatMessageW(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
(DWORD) errorCode,
0,
2026-04-05 19:32:33 +08:00
bufferW,
2026-04-21 18:14:57 +08:00
ARRAY_SIZE(bufferW),
NULL);
if (len == 0) {
snprintf(buffer, sizeof(buffer), "Unknown error code (%lu)", errorCode);
} else {
// Remove trailing newline
2026-04-05 19:32:33 +08:00
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);
}
}
return buffer;
}
2026-03-29 09:28:49 +08:00
const char* ffDebugNtStatus(NTSTATUS status) {
return ffDebugWin32Error(RtlNtStatusToDosError(status));
}
2026-03-27 20:14:47 +08:00
2026-03-29 09:28:49 +08:00
static inline DWORD HRESULTToWin32Error(HRESULT hr) {
if (SUCCEEDED(hr)) {
2026-03-27 20:14:47 +08:00
return ERROR_SUCCESS;
2026-03-29 09:28:49 +08:00
}
2026-03-27 20:14:47 +08:00
2026-03-29 09:28:49 +08:00
if (HRESULT_FACILITY(hr) == FACILITY_WIN32) {
2026-03-27 20:14:47 +08:00
return HRESULT_CODE(hr);
2026-03-29 09:28:49 +08:00
}
2026-03-27 20:14:47 +08:00
return ERROR_INTERNAL_ERROR;
}
2026-03-29 09:28:49 +08:00
const char* ffDebugHResult(HRESULT hr) {
2026-03-27 20:14:47 +08:00
return ffDebugWin32Error(HRESULTToWin32Error(hr));
}