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 |
|
---|