DECLEXPORT(void) crError(const char *pszFormat, ...) { va_list va; #ifdef WINDOWS DWORD dwLastErr; #endif #ifdef WINDOWS /* Log last error on windows. */ dwLastErr = GetLastError(); if (dwLastErr != 0 && crGetenv("CR_WINDOWS_ERRORS") != NULL) { LPTSTR pszWindowsMessage; SetLastError(0); FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, dwLastErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&pszWindowsMessage, 0, NULL); if (pszWindowsMessage) { logMessage("OpenGL, Windows error: ", "%u\n%s", dwLastErr, pszWindowsMessage); LocalFree(pszWindowsMessage); } else logMessage("OpenGL, Windows error: ", "%u", dwLastErr); } #endif /* The message. */ va_start(va, pszFormat); logMessageV("OpenGL Error: ", pszFormat, va); va_end(va); #ifdef DEBUG /* Let's interrupt App execution only on debug builds and return * bad status to upper level on release ones. */ # ifdef IN_GUEST /* Trigger debugger's breakpoint handler. */ ASMBreakpoint(); # else /* Dump core or activate the debugger in debug builds. */ AssertFailed(); # endif #endif /* DEBUG */ }
extern "C" void __cdecl NtProcessStartup(void *pvIgnored) { ASMBreakpoint(); NOREF(pvIgnored); }