1*3e12c5d1SDavid du Colombier #include <signal.h> 2*3e12c5d1SDavid du Colombier #include <errno.h> 3*3e12c5d1SDavid du Colombier 4*3e12c5d1SDavid du Colombier /* 5*3e12c5d1SDavid du Colombier * sigsets are 32-bit longs. if the 2<<(i-1) bit is on, 6*3e12c5d1SDavid du Colombier * the signal #define'd as i in signal.h is inluded. 7*3e12c5d1SDavid du Colombier */ 8*3e12c5d1SDavid du Colombier 9*3e12c5d1SDavid du Colombier static sigset_t stdsigs = SIGHUP|SIGINT|SIGQUIT|SIGILL|SIGABRT|SIGFPE|SIGKILL| 10*3e12c5d1SDavid du Colombier SIGSEGV|SIGPIPE|SIGALRM|SIGTERM|SIGUSR1|SIGUSR2; 11*3e12c5d1SDavid du Colombier 12*3e12c5d1SDavid du Colombier #define BITSIG(s) (2<<(s)) 13*3e12c5d1SDavid du Colombier 14*3e12c5d1SDavid du Colombier int sigemptyset(sigset_t * set)15*3e12c5d1SDavid du Colombiersigemptyset(sigset_t *set) 16*3e12c5d1SDavid du Colombier { 17*3e12c5d1SDavid du Colombier *set = 0; 18*3e12c5d1SDavid du Colombier return 0; 19*3e12c5d1SDavid du Colombier } 20*3e12c5d1SDavid du Colombier 21*3e12c5d1SDavid du Colombier int sigfillset(sigset_t * set)22*3e12c5d1SDavid du Colombiersigfillset(sigset_t *set) 23*3e12c5d1SDavid du Colombier { 24*3e12c5d1SDavid du Colombier *set = stdsigs; 25*3e12c5d1SDavid du Colombier return 0; 26*3e12c5d1SDavid du Colombier } 27*3e12c5d1SDavid du Colombier 28*3e12c5d1SDavid du Colombier int sigaddset(sigset_t * set,int signo)29*3e12c5d1SDavid du Colombiersigaddset(sigset_t *set, int signo) 30*3e12c5d1SDavid du Colombier { 31*3e12c5d1SDavid du Colombier int b; 32*3e12c5d1SDavid du Colombier 33*3e12c5d1SDavid du Colombier b = BITSIG(signo); 34*3e12c5d1SDavid du Colombier if(!(b&stdsigs)){ 35*3e12c5d1SDavid du Colombier errno = EINVAL; 36*3e12c5d1SDavid du Colombier return -1; 37*3e12c5d1SDavid du Colombier } 38*3e12c5d1SDavid du Colombier *set |= b; 39*3e12c5d1SDavid du Colombier return 0; 40*3e12c5d1SDavid du Colombier } 41*3e12c5d1SDavid du Colombier 42*3e12c5d1SDavid du Colombier int sigdelset(sigset_t * set,int signo)43*3e12c5d1SDavid du Colombiersigdelset(sigset_t *set, int signo) 44*3e12c5d1SDavid du Colombier { 45*3e12c5d1SDavid du Colombier int b; 46*3e12c5d1SDavid du Colombier 47*3e12c5d1SDavid du Colombier b = BITSIG(signo); 48*3e12c5d1SDavid du Colombier if(!(b&stdsigs)){ 49*3e12c5d1SDavid du Colombier errno = EINVAL; 50*3e12c5d1SDavid du Colombier return -1; 51*3e12c5d1SDavid du Colombier } 52*3e12c5d1SDavid du Colombier *set &= ~b; 53*3e12c5d1SDavid du Colombier return 0; 54*3e12c5d1SDavid du Colombier } 55*3e12c5d1SDavid du Colombier 56*3e12c5d1SDavid du Colombier int sigismember(sigset_t * set,int signo)57*3e12c5d1SDavid du Colombiersigismember(sigset_t *set, int signo) 58*3e12c5d1SDavid du Colombier { 59*3e12c5d1SDavid du Colombier int b; 60*3e12c5d1SDavid du Colombier 61*3e12c5d1SDavid du Colombier b = BITSIG(signo); 62*3e12c5d1SDavid du Colombier if(!(b&stdsigs)){ 63*3e12c5d1SDavid du Colombier errno = EINVAL; 64*3e12c5d1SDavid du Colombier return -1; 65*3e12c5d1SDavid du Colombier } 66*3e12c5d1SDavid du Colombier return (b&*set)? 1 : 0; 67*3e12c5d1SDavid du Colombier } 68