diff options
Diffstat (limited to 'lib/libF77/sig_die.c')
-rw-r--r-- | lib/libF77/sig_die.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/libF77/sig_die.c b/lib/libF77/sig_die.c new file mode 100644 index 0000000..dba1521 --- /dev/null +++ b/lib/libF77/sig_die.c @@ -0,0 +1,45 @@ +#include "stdio.h" +#include "signal.h" + +#ifndef SIGIOT +#ifdef SIGABRT +#define SIGIOT SIGABRT +#endif +#endif + +#ifdef KR_headers +void sig_die(s, kill) register char *s; int kill; +#else +#include "stdlib.h" +#ifdef __cplusplus +extern "C" { +#endif + extern void f_exit(void); + +void sig_die(register char *s, int kill) +#endif +{ + /* print error message, then clear buffers */ + fprintf(stderr, "%s\n", s); + + if(kill) + { + fflush(stderr); + f_exit(); + fflush(stderr); + /* now get a core */ +#ifdef SIGIOT + signal(SIGIOT, SIG_DFL); +#endif + abort(); + } + else { +#ifdef NO_ONEXIT + f_exit(); +#endif + exit(1); + } + } +#ifdef __cplusplus +} +#endif |