root/cserver/wsignals.c

Revision 1203, 1.1 kB (checked in by efphe, 1 year ago)

moving code from fenilot.org

Line 
1 #include "wsignals.h"
2 #include "server_utils.h"
3 #include "wlog.h"
4
5 void w_sigemptyset(sigset_t *s)
6 {
7     if (sigemptyset(s))
8         fatal("Fatal sigemptyset()");
9     return;
10 }
11
12 void w_sigaddset(sigset_t *s, int signum)
13 {
14     if (!sigismember(s,signum))
15         if (sigaddset(s,signum))
16             fatal("Fatal sigaddset().");
17     return;
18 }
19
20 void w_sigdelset(sigset_t *s, int signum)
21 {
22     if (sigismember(s,signum))
23         if (sigdelset(s,signum))
24             fatal("Fatal sigdelset().");
25     return;
26 }
27
28 void w_sigaction(int signum, sigset_t *block, void (*f)(int))
29 {
30     struct sigaction a;
31     int res;
32     char buf[10];
33
34     memset(&a,0,sizeof(struct sigaction));
35
36     a.sa_handler= f;
37     memcpy(&a.sa_mask,block,sizeof(sigset_t));
38
39     if ((res=sigaction(signum, &a, 0))) {
40         switch(res) {
41         case EFAULT:
42             sprintf(buf,"EFAULT");
43             break;
44         case EINVAL:
45             sprintf(buf,"EINVAL:");
46             break;
47         default:
48             sprintf(buf,"EUNKNOW:");
49             break;
50         }
51         fatal("Fatal sigaction(): %s.", buf);
52     }
53     return;
54 }
55
56
Note: See TracBrowser for help on using the browser.