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