-/* $Id: signal.c 3483 2007-05-07 11:18:56Z mquinson $ */\r
-\r
-/* signal -- what TESH needs to know about signals */\r
-\r
-/* Copyright (c) 2007 Martin Quinson. */\r
-/* All rights reserved. */\r
-\r
+/* $Id: signal.c 3483 2007-05-07 11:18:56Z mquinson $ */ \r
+ \r
+/* signal -- what TESH needs to know about signals */ \r
+ \r
+/* Copyright (c) 2007 Martin Quinson. */ \r
+/* All rights reserved. */ \r
+ \r
/* This program is free software; you can redistribute it and/or modify it\r
- * under the terms of the license (GNU LGPL) which comes with this package. */\r
-\r
+ * under the terms of the license (GNU LGPL) which comes with this package. */ \r
+ \r
#include <xsignal.h>\r
-\r
+ \r
#ifdef _XBT_WIN32\r
-int\r
-is_an_unhandled_exception(DWORD exit_code);\r
-\r
-typedef struct s_exception_entry\r
-{\r
- DWORD value;\r
- const char* signal;\r
-}s_exception_entry_t,* exception_entry_t;\r
- \r
-static const s_exception_entry_t exceptions[] =\r
-{\r
- {EXCEPTION_ACCESS_VIOLATION, "SIGSEGV"},\r
- {EXCEPTION_ARRAY_BOUNDS_EXCEEDED, "SIGSEGV"},\r
- {EXCEPTION_BREAKPOINT, "SIGTRAP"},\r
- {EXCEPTION_DATATYPE_MISALIGNMENT, "SIGBUS"},\r
- {EXCEPTION_FLT_DENORMAL_OPERAND, "SIGFPE"},\r
- {EXCEPTION_FLT_DIVIDE_BY_ZERO, "SIGFPE"},\r
- {EXCEPTION_FLT_INEXACT_RESULT, "SIGFPE"},\r
- {EXCEPTION_FLT_INVALID_OPERATION, "SIGFPE"},\r
- {EXCEPTION_FLT_OVERFLOW, "SIGFPE"},\r
- {EXCEPTION_FLT_STACK_CHECK, "SIGFPE"},\r
- {EXCEPTION_FLT_UNDERFLOW, "SIGFPE"},\r
- {EXCEPTION_ILLEGAL_INSTRUCTION, "SIGILL"},\r
- {EXCEPTION_IN_PAGE_ERROR, "SIGSEGV"},\r
- {EXCEPTION_INT_DIVIDE_BY_ZERO, "SIGFPE"},\r
- {EXCEPTION_INT_OVERFLOW, "SIGFPE"},\r
- {EXCEPTION_STACK_OVERFLOW, "SIGILL"},\r
- {EXCEPTION_SINGLE_STEP, "SIGTRAP"},\r
- {EXCEPTION_NONCONTINUABLE_EXCEPTION, "SIGILL"},\r
- {EXCEPTION_PRIV_INSTRUCTION, "SIGILL"}\r
-};\r
-/* number of the entries in the table of exceptions */\r
+int \r is_an_unhandled_exception(DWORD exit_code);
+\r\rtypedef struct s_exception_entry \r {
+ \rDWORD value;
+ \rconst char *signal;
+\r} s_exception_entry_t, *exception_entry_t;
+\r\rstatic const s_exception_entry_t exceptions[] = \r
+ { \r
+{EXCEPTION_ACCESS_VIOLATION, "SIGSEGV"}, \r
+{EXCEPTION_ARRAY_BOUNDS_EXCEEDED, "SIGSEGV"}, \r
+{EXCEPTION_BREAKPOINT, "SIGTRAP"}, \r
+{EXCEPTION_DATATYPE_MISALIGNMENT, "SIGBUS"}, \r
+{EXCEPTION_FLT_DENORMAL_OPERAND, "SIGFPE"}, \r
+{EXCEPTION_FLT_DIVIDE_BY_ZERO, "SIGFPE"}, \r
+{EXCEPTION_FLT_INEXACT_RESULT, "SIGFPE"}, \r
+{EXCEPTION_FLT_INVALID_OPERATION, "SIGFPE"}, \r
+{EXCEPTION_FLT_OVERFLOW, "SIGFPE"}, \r
+{EXCEPTION_FLT_STACK_CHECK, "SIGFPE"}, \r
+{EXCEPTION_FLT_UNDERFLOW, "SIGFPE"}, \r
+{EXCEPTION_ILLEGAL_INSTRUCTION, "SIGILL"}, \r
+{EXCEPTION_IN_PAGE_ERROR, "SIGSEGV"}, \r
+{EXCEPTION_INT_DIVIDE_BY_ZERO, "SIGFPE"}, \r
+{EXCEPTION_INT_OVERFLOW, "SIGFPE"}, \r
+{EXCEPTION_STACK_OVERFLOW, "SIGILL"}, \r
+{EXCEPTION_SINGLE_STEP, "SIGTRAP"}, \r
+{EXCEPTION_NONCONTINUABLE_EXCEPTION, "SIGILL"}, \r{EXCEPTION_PRIV_INSTRUCTION, "SIGILL"} \r
+};
+
+\r
+/* number of the entries in the table of exceptions */ \r
#define MAX_EXECPTION ((unsigned int)19)\r
-\r
-#endif\r
-\r
-typedef struct s_signal_entry {\r
- const char* name;\r
- int number;\r
-} s_signal_entry_t,* signal_entry_t;\r
-\r
-static const s_signal_entry_t signals[] = {\r
- {"SIGHUP" ,SIGHUP},\r
- {"SIGINT" ,SIGINT},\r
- {"SIGQUIT" ,SIGQUIT},\r
- {"SIGILL" ,SIGILL},\r
- {"SIGTRAP" ,SIGTRAP},\r
- {"SIGABRT" ,SIGABRT},\r
- {"SIGFPE" ,SIGFPE},\r
- {"SIGKILL" ,SIGKILL},\r
- {"SIGBUS" ,SIGBUS},\r
- {"SIGSEGV" ,SIGSEGV},\r
- {"SIGSYS" ,SIGSYS},\r
- {"SIGPIPE" ,SIGPIPE},\r
- {"SIGALRM" ,SIGALRM},\r
- {"SIGTERM" ,SIGTERM},\r
- {"SIGURG" ,SIGURG},\r
- {"SIGSTOP" ,SIGSTOP},\r
- {"SIGTSTP" ,SIGTSTP},\r
- {"SIGCONT" ,SIGCONT},\r
- {"SIGCHLD" ,SIGCHLD},\r
- {"SIGTTIN" ,SIGTTIN},\r
- {"SIGTTOU" ,SIGTTOU},\r
- {"SIGIO" ,SIGIO},\r
- {"SIGXCPU" ,SIGXCPU},\r
- {"SIGXFSZ" ,SIGXFSZ},\r
- {"SIGVTALRM",SIGVTALRM},\r
- {"SIGPROF" ,SIGPROF},\r
- {"SIGWINCH" ,SIGWINCH},\r
- {"SIGUSR1" ,SIGUSR1},\r
- {"SIGUSR2" ,SIGUSR2},\r
- {"SIG UNKNOWN" ,-1}\r
-};\r
-\r
+ \r
+#endif /* \r */
+ \rtypedef struct s_signal_entry {
+ \rconst char *name;
+ \r int number;
+\r} s_signal_entry_t, *signal_entry_t;
+\r\rstatic const s_signal_entry_t signals[] = { \r
+ {"SIGHUP", SIGHUP}, \r
+ {"SIGINT", SIGINT}, \r
+ {"SIGQUIT", SIGQUIT}, \r
+ {"SIGILL", SIGILL}, \r
+ {"SIGTRAP", SIGTRAP}, \r
+ {"SIGABRT", SIGABRT}, \r
+ {"SIGFPE", SIGFPE}, \r
+ {"SIGKILL", SIGKILL}, \r
+ {"SIGBUS", SIGBUS}, \r
+ {"SIGSEGV", SIGSEGV}, \r
+ {"SIGSYS", SIGSYS}, \r
+ {"SIGPIPE", SIGPIPE}, \r
+ {"SIGALRM", SIGALRM}, \r
+ {"SIGTERM", SIGTERM}, \r
+ {"SIGURG", SIGURG}, \r
+ {"SIGSTOP", SIGSTOP}, \r
+ {"SIGTSTP", SIGTSTP}, \r
+ {"SIGCONT", SIGCONT}, \r
+ {"SIGCHLD", SIGCHLD}, \r
+ {"SIGTTIN", SIGTTIN}, \r
+ {"SIGTTOU", SIGTTOU}, \r
+ {"SIGIO", SIGIO}, \r
+ {"SIGXCPU", SIGXCPU}, \r
+ {"SIGXFSZ", SIGXFSZ}, \r
+ {"SIGVTALRM", SIGVTALRM}, \r
+ {"SIGPROF", SIGPROF}, \r
+ {"SIGWINCH", SIGWINCH}, \r
+ {"SIGUSR1", SIGUSR1}, \r{"SIGUSR2", SIGUSR2}, \r{"SIG UNKNOWN", -1} \r
+};
+
+\r\r
#ifdef _XBT_WIN32\r
-const char* signal_name(DWORD got, const char* expected) \r
-#else\r
-const char* signal_name(unsigned int got, char *expected) \r
-#endif\r
-{\r
- int i;\r
- \r
- #ifdef _XBT_WIN32\r
-\r
- for (i=0; i < MAX_EXECPTION; i++)\r
- if (exceptions[i].value == got)\r
- return (exceptions[i].signal);\r
- #else\r
- if((got == SIGBUS) && !strcmp("SIGSEGV",expected))\r
- got = SIGSEGV;\r
-\r
- for (i=0; signals[i].number != -1; i++)\r
- if (signals[i].number == got)\r
- return (signals[i].name);\r
- \r
- #endif\r
- return bprintf("SIG UNKNOWN (%d)", got);\r
-}\r
-\r
-int\r
-sig_exists(const char* sig_name)\r
-{\r
- int i;\r
-\r
- for (i=0; signals[i].number != -1; i++)\r
- if (!strcmp(signals[i].name, sig_name))\r
- return 1; \r
-\r
- /* not found */\r
- return 0;\r
-}\r
-\r
-\r
+const char *signal_name(DWORD got, const char *expected) \r
+#else /* \r */
+const char *signal_name(unsigned int got, char *expected) \r
+#endif /* \r */
+{
+ \rint i;
+ \r\r
#ifdef _XBT_WIN32\r
-int\r
-is_an_unhandled_exception(DWORD exit_code)\r
-{\r
- unsigned int i;\r
-\r
- for(i = 0; i < MAX_EXECPTION; i++)\r
- if(exceptions[i].value == exit_code)\r
- return 1;\r
- \r
- return 0; \r
-}\r
-#endif\r
+ \rfor (i = 0; i < MAX_EXECPTION; i++)
+ \rif (exceptions[i].value == got)
+ \rreturn (exceptions[i].signal);
+ \r
+#else /* \r */
+ if ((got == SIGBUS) && !strcmp("SIGSEGV", expected))
+ \rgot = SIGSEGV;
+ \r\rfor (i = 0; signals[i].number != -1; i++)
+ \rif (signals[i].number == got)
+ \rreturn (signals[i].name);
+ \r\r
+#endif /* \r */
+ return bprintf("SIG UNKNOWN (%d)", got);
+\r}
+
+\r\rint \r sig_exists(const char *sig_name) \r
+{
+ \rint i;
+ \r\rfor (i = 0; signals[i].number != -1; i++)
+ \rif (!strcmp(signals[i].name, sig_name))
+ \rreturn 1;
+ \r\r
+ /* not found */ \r
+ return 0;
+\r}
+
+\r\r\r
+#ifdef _XBT_WIN32\r
+int \r is_an_unhandled_exception(DWORD exit_code) \r
+{
+ \runsigned int i;
+ \r\rfor (i = 0; i < MAX_EXECPTION; i++)
+ \rif (exceptions[i].value == exit_code)
+ \rreturn 1;
+ \r\rreturn 0;
+\r}
+
+\r
+#endif /* \r */