summaryrefslogtreecommitdiffstats
path: root/generic/tclPanic.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclPanic.c')
-rw-r--r--generic/tclPanic.c78
1 files changed, 24 insertions, 54 deletions
diff --git a/generic/tclPanic.c b/generic/tclPanic.c
index b032449..600307e 100644
--- a/generic/tclPanic.c
+++ b/generic/tclPanic.c
@@ -14,20 +14,20 @@
*/
#include "tclInt.h"
-#if defined(_WIN32) || defined(__CYGWIN__)
- MODULE_SCOPE TCL_NORETURN void tclWinDebugPanic(const char *format, ...);
-#endif
/*
* The panicProc variable contains a pointer to an application specific panic
* procedure.
*/
-#if defined(__CYGWIN__)
-static TCL_NORETURN Tcl_PanicProc *panicProc = tclWinDebugPanic;
-#else
-static TCL_NORETURN1 Tcl_PanicProc *panicProc = NULL;
-#endif
+static Tcl_PanicProc *panicProc = NULL;
+
+/*
+ * The platformPanicProc variable contains a pointer to a platform specific
+ * panic procedure, if any. (TclpPanic may be NULL via a macro.)
+ */
+
+static Tcl_PanicProc *CONST platformPanicProc = TclpPanic;
/*
*----------------------------------------------------------------------
@@ -47,16 +47,8 @@ static TCL_NORETURN1 Tcl_PanicProc *panicProc = NULL;
void
Tcl_SetPanicProc(
- TCL_NORETURN1 Tcl_PanicProc *proc)
+ Tcl_PanicProc *proc)
{
-#if defined(_WIN32)
- /* tclWinDebugPanic only installs if there is no panicProc yet. */
- if ((proc != tclWinDebugPanic) || (panicProc == NULL))
-#elif defined(__CYGWIN__)
- if (proc == NULL)
- panicProc = tclWinDebugPanic;
- else
-#endif
panicProc = proc;
}
@@ -78,13 +70,13 @@ Tcl_SetPanicProc(
void
Tcl_PanicVA(
- const char *format, /* Format string, suitable for passing to
+ CONST char *format, /* Format string, suitable for passing to
* fprintf. */
va_list argList) /* Variable argument list. */
{
- char *arg1, *arg2, *arg3; /* Additional arguments (variable in number)
- * to pass to fprintf. */
- char *arg4, *arg5, *arg6, *arg7, *arg8;
+ char *arg1, *arg2, *arg3, *arg4; /* Additional arguments (variable in
+ * number) to pass to fprintf. */
+ char *arg5, *arg6, *arg7, *arg8;
arg1 = va_arg(argList, char *);
arg2 = va_arg(argList, char *);
@@ -96,32 +88,17 @@ Tcl_PanicVA(
arg8 = va_arg(argList, char *);
if (panicProc != NULL) {
- panicProc(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
-#ifdef _WIN32
- } else if (IsDebuggerPresent()) {
- tclWinDebugPanic(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
-#endif
+ (void) (*panicProc)(format, arg1, arg2, arg3, arg4,
+ arg5, arg6, arg7, arg8);
+ } else if (platformPanicProc != NULL) {
+ (void) (*platformPanicProc)(format, arg1, arg2, arg3, arg4,
+ arg5, arg6, arg7, arg8);
} else {
- fprintf(stderr, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7,
- arg8);
- fprintf(stderr, "\n");
- fflush(stderr);
-#if defined(_WIN32) || defined(__CYGWIN__)
-# if defined(__GNUC__)
- __builtin_trap();
-# elif defined(_WIN64)
- __debugbreak();
-# elif defined(_MSC_VER)
- _asm {int 3}
-# else
- DebugBreak();
-# endif
-#endif
-#if defined(_WIN32)
- ExitProcess(1);
-#else
+ (void) fprintf(stderr, format, arg1, arg2, arg3, arg4, arg5, arg6,
+ arg7, arg8);
+ (void) fprintf(stderr, "\n");
+ (void) fflush(stderr);
abort();
-#endif
}
}
@@ -141,17 +118,10 @@ Tcl_PanicVA(
*----------------------------------------------------------------------
*/
-/* ARGSUSED */
-
-/*
- * The following comment is here so that Coverity's static analizer knows that
- * a Tcl_Panic() call can never return and avoids lots of false positives.
- */
-
-/* coverity[+kill] */
+ /* ARGSUSED */
void
Tcl_Panic(
- const char *format,
+ CONST char *format,
...)
{
va_list argList;