rtengine/src/runtime/assert.c
Kevin Trogant 8f52ea3d3a
Some checks failed
Ubuntu Cross to Win64 / Cross Compile with ming64 (1.4.0, ubuntu-latest) (push) Failing after 1m32s
Fixed linux -> windows cross compilation
2024-07-16 11:48:28 +02:00

45 lines
1.3 KiB
C

#include "config.h"
#include "runtime.h"
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#include <stdio.h>
RT_CVAR_I(rt_AssertEnabled, "Enables or disables asserts in non-release builds. Default: 1", 1);
#define ASSERT_HANDLER_DBGBREAK 0
#define ASSERT_HANDLER_CONTINUE 1
RT_DLLEXPORT int rtAssertHandler(const char *expr, const char *msg, const char *file, int line) {
if (!rt_AssertEnabled.i)
return ASSERT_HANDLER_CONTINUE;
rtLog("ASSERT", "[%s:%d] Assertion (%s) failed: %s", file, line, expr, msg);
#ifdef _WIN32
char outmessage[512];
snprintf(outmessage,
511,
"Assertion failed: %s\nMessage: %s\n%s:%d\nPress \"Yes\" to debug-break, \"No\" to "
"continue with asserts enabled or \"Cancel\" to disable asserts.",
expr,
msg,
file,
line);
outmessage[511] = '\0';
DWORD action = MessageBoxA(NULL, outmessage, "Assertion Failed", MB_YESNOCANCEL | MB_ICONERROR);
if (action == IDYES) {
return ASSERT_HANDLER_DBGBREAK;
} else if (action == IDCANCEL) {
rt_AssertEnabled.i = 0;
} else if (action != IDNO) {
rtReportError("CORE", "MessageBoxA for a failed assertion failed.");
__debugbreak();
ExitProcess(1);
}
#endif
return ASSERT_HANDLER_CONTINUE;
}