-
Notifications
You must be signed in to change notification settings - Fork 315
/
psignal.h
173 lines (137 loc) · 5.92 KB
/
psignal.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/*****************************************************************************
* *
* signal.h *
* *
* Freely redistributable and modifiable. Use at your own risk. *
* *
* Copyright 1994-1999 The Downhill Project *
* http://www.ede.com/free/u2nt *
* *
*****************************************************************************/
/*
Original version taken at
Changes (g.m.):
10.06.1999: Made self contained - Changed some names
11.06.1999: Added 'sigsetjmp' and 'siglongjmp'
12.06.1999: Added pause and sigsuspend (require a version (also
a non POSIX one) of sleep; if your system don't have it
define DONT_HAVE_SLEEP)
27/06/1999: (BDR) convert sigsetjmp and siglongjmp macros to (,,)
12/07/1999: (BDR) fix sigsetjmp macro to set saved_mask
*/
#ifndef _PSIGNAL_H_
#define _PSIGNAL_H_
#include <stdlib.h>
#include <errno.h>
#include <setjmp.h>
#define SIGHUP 1 /* hangup */
#define SIGINT 2 /* interrupt */
#define SIGQUIT 3 /* quit */
#define SIGILL 4 /* illegal instruction (not reset when caught) */
#define SIGTRAP 5 /* trace trap (not reset when caught) */
#define SIGEMT 7 /* EMT instruction */
#define SIGFPE 8 /* floating point exception */
#define SIGKILL 9 /* kill (cannot be caught or ignored) */
#define SIGBUS 10 /* bus error */
#define SIGSEGV 11 /* segmentation violation */
#define SIGSYS 12 /* bad argument to system call */
#define SIGPIPE 13 /* write on a pipe with no one to read it */
#define SIGALRM 14 /* alarm clock */
#define SIGTERM 15 /* software termination signal from kill */
#define SIGURG 16 /* urgent condition on IO channel */
#define SIGSTOP 17 /* sendable stop signal not from tty */
#define SIGTSTP 18 /* stop signal from tty */
#define SIGCONT 19 /* continue a stopped process */
#define SIGCHLD 20 /* to parent on child stop or exit */
#define SIGCLD 20 /* System V name for SIGCHLD */
#define SIGBREAK 21 /* to readers pgrp upon background tty read */
#define SIGABRT 22 /* used by abort */
#define SIGIO 23 /* input/output possible signal */
#define SIGPOLL SIGIO /* System V name for SIGIO */
#define SIGXCPU 24 /* exceeded CPU time limit */
#define SIGXFSZ 25 /* exceeded file size limit */
#define SIGVTALRM 26 /* virtual time alarm */
#define SIGPROF 27 /* profiling time alarm */
#define SIGWINCH 28 /* window changed */
#define SIGLOST 29 /* resource lost (eg, record-lock lost) */
#define SIGUSR1 30 /* user defined signal 1 */
#define SIGUSR2 31 /* user defined signal 2 */
#define NSIG 32 /* signal 0 implied */
#ifndef RC_INVOKED
/*
* A pointer to a signal handler function. A signal handler takes a
* single int, which is the signal it handles.
*/
typedef void (*sighandler_t)(int nSig);
#ifndef _SIGSET_T_
#define _SIGSET_T_
typedef int sigset_t;
#endif /* Not _SIGSET_T_ */
/*
* These are special values of signal handler pointers which are
* used to send a signal to the default handler (SIG_DFL), ignore
* the signal (SIG_IGN), or indicate an error return (SIG_ERR).
*/
#define SIG_DFL ((sighandler_t) 0)
#define SIG_IGN ((sighandler_t) 1)
#define SIG_ERR ((sighandler_t) -1)
#ifdef __cplusplus
extern "C" {
#endif
/* Signal mask actions ===================================================== */
#define SIG_BLOCK 0
#define SIG_UNBLOCK 1
#define SIG_SETMASK 2
/* Signal flag actions ===================================================== */
#define SA_NOCLDSTOP 1
#define SA_RESETHAND 2
/* Struct stuff **************************************************************/struct sigaction
{
void (*sa_handler)(int);
sigset_t sa_mask;
int sa_flags;
};
typedef struct
{
jmp_buf jmpbuf; /* Calling environment. */
int mask_was_saved; /* Saved the signal mask? */
sigset_t saved_mask; /* Saved signal mask. */
} sigjmp_buf[1];
/* Prototype stuff ***********************************************************/
unsigned long sigsetmask(unsigned long signal_Block_MaskNew);
unsigned long sigblock(unsigned long signal_Block_MaskNew);
int sighold(int signal_Number);
int sigrelse(int signal_Number);
int sigaction(int signal_Number,struct sigaction* sigaction_Info,
struct sigaction* signaction_InfoOld);
int sigaddset(sigset_t* sigset_Info,int signal_Number);
int sigdelset(sigset_t* sigset_Info,int signal_Number);
int sigemptyset(sigset_t* sigset_Info);
int sigfillset(sigset_t* sigset_Info);
int sigismember(sigset_t* sigset_Info,int signal_Number);
int sigpending(sigset_t* sigset_Info);
int sigprocmask(int mask_Function,sigset_t* sigset_Info,
sigset_t* sigset_InfoOld);
sighandler_t signal(int signal_Number, sighandler_t);
void raise(int);
int pause(void);
int sigsuspend(sigset_t* sigset_Info);
/* Re-mapped functions ===================================================== */
#define sigmask(signal_Index) (1<<(signal_Index-1))
/*
This must be a macro, since we want setjmp working in the
calling environment
*/
#define sigsetjmp(jb, sm) (\
sm?sigprocmask(SIG_SETMASK,NULL,&jb->saved_mask):0,\
jb->mask_was_saved=sm,\
setjmp(jb->jmpbuf))
/* We can transform this in a function but ... */
#define siglongjmp(jb, val) (((jb->mask_was_saved)?\
sigprocmask(SIG_SETMASK, &jb->saved_mask, 0):0),\
longjmp(jb->jmpbuf, val))
#ifdef __cplusplus
}
#endif
#endif /* Not RC_INVOKED */
#endif /* Not _PSIGNAL_H_ */