| 1 | /* | 
 
 
 
 
 | 2 | * signal.h | 
 
 
 
 
 | 3 | * This file has no copyright assigned and is placed in the Public Domain. | 
 
 
 
 
 | 4 | * This file is a part of the mingw-runtime package. | 
 
 
 
 
 | 5 | * No warranty is given; refer to the file DISCLAIMER within the package. | 
 
 
 
 
 | 6 | * | 
 
 
 
 
 | 7 | * A way to set handlers for exceptional conditions (also known as signals). | 
 
 
 
 
 | 8 | * | 
 
 
 
 
 | 9 | */ | 
 
 
 
 
 | 10 |  | 
 
 
 
 
 | 11 | #ifndef _SIGNAL_H_ | 
 
 
 
 
 | 12 | #define _SIGNAL_H_ | 
 
 
 
 
 | 13 |  | 
 
 
 
 
 | 14 | /* All the headers include this file. */ | 
 
 
 
 
 | 15 | #include <_mingw.h> | 
 
 
 
 
 | 16 |  | 
 
 
 
 
 | 17 | /* | 
 
 
 
 
 | 18 | * The actual signal values. Using other values with signal | 
 
 
 
 
 | 19 | * produces a SIG_ERR return value. | 
 
 
 
 
 | 20 | * | 
 
 
 
 
 | 21 | * NOTE: SIGINT is produced when the user presses Ctrl-C. | 
 
 
 
 
 | 22 | *       SIGILL has not been tested. | 
 
 
 
 
 | 23 | *       SIGFPE doesn't seem to work? | 
 
 
 
 
 | 24 | *       SIGSEGV does not catch writing to a NULL pointer (that shuts down | 
 
 
 
 
 | 25 | *               your app; can you say "segmentation violation core dump"?). | 
 
 
 
 
 | 26 | *       SIGTERM comes from what kind of termination request exactly? | 
 
 
 
 
 | 27 | *       SIGBREAK is indeed produced by pressing Ctrl-Break. | 
 
 
 
 
 | 28 | *       SIGABRT is produced by calling abort. | 
 
 
 
 
 | 29 | * TODO: The above results may be related to not installing an appropriate | 
 
 
 
 
 | 30 | *       structured exception handling frame. Results may be better if I ever | 
 
 
 
 
 | 31 | *       manage to get the SEH stuff down. | 
 
 
 
 
 | 32 | */ | 
 
 
 
 
 | 33 | #define SIGINT          2       /* Interactive attention */ | 
 
 
 
 
 | 34 | #define SIGILL          4       /* Illegal instruction */ | 
 
 
 
 
 | 35 | #define SIGFPE          8       /* Floating point error */ | 
 
 
 
 
 | 36 | #define SIGSEGV         11      /* Segmentation violation */ | 
 
 
 
 
 | 37 | #define SIGTERM         15      /* Termination request */ | 
 
 
 
 
 | 38 | #define SIGBREAK        21      /* Control-break */ | 
 
 
 
 
 | 39 | #define SIGABRT         22      /* Abnormal termination (abort) */ | 
 
 
 
 
 | 40 |  | 
 
 
 
 
 | 41 | #define NSIG 23     /* maximum signal number + 1 */ | 
 
 
 
 
 | 42 |  | 
 
 
 
 
 | 43 | #ifndef RC_INVOKED | 
 
 
 
 
 | 44 |  | 
 
 
 
 
 | 45 | #ifndef _SIG_ATOMIC_T_DEFINED | 
 
 
 
 
 | 46 | typedef int sig_atomic_t; | 
 
 
 
 
 | 47 | #define _SIG_ATOMIC_T_DEFINED | 
 
 
 
 
 | 48 | #endif | 
 
 
 
 
 | 49 |  | 
 
 
 
 
 | 50 | /* | 
 
 
 
 
 | 51 | * The prototypes (below) are the easy part. The hard part is figuring | 
 
 
 
 
 | 52 | * out what signals are available and what numbers they are assigned | 
 
 
 
 
 | 53 | * along with appropriate values of SIG_DFL and SIG_IGN. | 
 
 
 
 
 | 54 | */ | 
 
 
 
 
 | 55 |  | 
 
 
 
 
 | 56 | /* | 
 
 
 
 
 | 57 | * A pointer to a signal handler function. A signal handler takes a | 
 
 
 
 
 | 58 | * single int, which is the signal it handles. | 
 
 
 
 
 | 59 | */ | 
 
 
 
 
 | 60 | typedef void (*__p_sig_fn_t)(int); | 
 
 
 
 
 | 61 |  | 
 
 
 
 
 | 62 | /* | 
 
 
 
 
 | 63 | * These are special values of signal handler pointers which are | 
 
 
 
 
 | 64 | * used to send a signal to the default handler (SIG_DFL), ignore | 
 
 
 
 
 | 65 | * the signal (SIG_IGN), indicate an error return (SIG_ERR), | 
 
 
 
 
 | 66 | * get an error (SIG_SGE), or acknowledge (SIG_ACK). | 
 
 
 
 
 | 67 | */ | 
 
 
 
 
 | 68 | #define SIG_DFL ((__p_sig_fn_t) 0) | 
 
 
 
 
 | 69 | #define SIG_IGN ((__p_sig_fn_t) 1) | 
 
 
 
 
 | 70 | #define SIG_ERR ((__p_sig_fn_t) -1) | 
 
 
 
 
 | 71 | #define SIG_SGE ((__p_sig_fn_t) 3) | 
 
 
 
 
 | 72 | #define SIG_ACK ((__p_sig_fn_t) 4) | 
 
 
 
 
 | 73 |  | 
 
 
 
 
 | 74 | #ifdef  __cplusplus | 
 
 
 
 
 | 75 | extern "C" { | 
 
 
 
 
 | 76 | #endif | 
 
 
 
 
 | 77 |  | 
 
 
 
 
 | 78 | /* | 
 
 
 
 
 | 79 | * Call signal to set the signal handler for signal sig to the | 
 
 
 
 
 | 80 | * function pointed to by handler. Returns a pointer to the | 
 
 
 
 
 | 81 | * previous handler, or SIG_ERR if an error occurs. Initially | 
 
 
 
 
 | 82 | * unhandled signals defined above will return SIG_DFL. | 
 
 
 
 
 | 83 | */ | 
 
 
 
 
 | 84 | _CRTIMP __p_sig_fn_t __cdecl __MINGW_NOTHROW    signal(int, __p_sig_fn_t); | 
 
 
 
 
 | 85 |  | 
 
 
 
 
 | 86 | /* | 
 
 
 
 
 | 87 | * Raise the signal indicated by sig. Returns non-zero on success. | 
 
 
 
 
 | 88 | */ | 
 
 
 
 
 | 89 | _CRTIMP int __cdecl __MINGW_NOTHROW     raise (int); | 
 
 
 
 
 | 90 |  | 
 
 
 
 
 | 91 | #ifdef  __cplusplus | 
 
 
 
 
 | 92 | } | 
 
 
 
 
 | 93 | #endif | 
 
 
 
 
 | 94 |  | 
 
 
 
 
 | 95 | #endif  /* Not RC_INVOKED */ | 
 
 
 
 
 | 96 |  | 
 
 
 
 
 | 97 | #endif  /* Not _SIGNAL_H_ */ | 
 
 
 
 
 | 98 |  |