diff options
Diffstat (limited to 'win/tclWinPanic.c')
| -rw-r--r-- | win/tclWinPanic.c | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/win/tclWinPanic.c b/win/tclWinPanic.c deleted file mode 100644 index 3131286..0000000 --- a/win/tclWinPanic.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * tclWinPanic.c -- - * - * Contains the Windows-specific command-line panic proc. - * - * Copyright © 2013 Jan Nijtmans. - * All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - */ - -#include "tclInt.h" -/* - *---------------------------------------------------------------------- - * - * Tcl_ConsolePanic -- - * - * Display a message. If a debugger is present, present it directly to - * the debugger, otherwise send it to stderr. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -void -Tcl_ConsolePanic( - const char *format, ...) -{ -#define TCL_MAX_WARN_LEN 26000 - va_list argList; - WCHAR msgString[TCL_MAX_WARN_LEN]; - char buf[TCL_MAX_WARN_LEN * 3]; - HANDLE handle = GetStdHandle(STD_ERROR_HANDLE); - DWORD dummy; - - va_start(argList, format); - vsnprintf(buf+3, sizeof(buf)-3, format, argList); - buf[sizeof(buf)-1] = 0; - msgString[TCL_MAX_WARN_LEN-1] = '\0'; - MultiByteToWideChar(CP_UTF8, 0, buf+3, -1, msgString, TCL_MAX_WARN_LEN); - - /* - * Truncate MessageBox string if it is too long to not overflow the buffer. - */ - - if (msgString[TCL_MAX_WARN_LEN-1] != '\0') { - memcpy(msgString + (TCL_MAX_WARN_LEN - 5), L" ...", 5 * sizeof(WCHAR)); - } - - if (IsDebuggerPresent()) { - OutputDebugStringW(msgString); - } else if (_isatty(2)) { - WriteConsoleW(handle, msgString, (DWORD)wcslen(msgString), &dummy, 0); - } else { - buf[0] = '\xEF'; buf[1] = '\xBB'; buf[2] = '\xBF'; /* UTF-8 bom */ - WriteFile(handle, buf, (DWORD)strlen(buf), &dummy, 0); - WriteFile(handle, "\n", 1, &dummy, 0); - FlushFileBuffers(handle); - } -# if defined(__GNUC__) - __builtin_trap(); -# elif defined(_WIN64) - __debugbreak(); -# elif defined(_MSC_VER) - _asm {int 3} -# else - DebugBreak(); -# endif -#if defined(_WIN32) - ExitProcess(1); -#else - abort(); -#endif -} -/* - * Local Variables: - * mode: c - * c-basic-offset: 4 - * fill-column: 78 - * tab-width: 8 - * End: - */ |
