1*6eef5f0cSAntonio Huete Jimenez /* NAME: 2*6eef5f0cSAntonio Huete Jimenez * sigact.h - sigaction et al 3*6eef5f0cSAntonio Huete Jimenez * 4*6eef5f0cSAntonio Huete Jimenez * SYNOPSIS: 5*6eef5f0cSAntonio Huete Jimenez * #include "sigact.h" 6*6eef5f0cSAntonio Huete Jimenez * 7*6eef5f0cSAntonio Huete Jimenez * DESCRIPTION: 8*6eef5f0cSAntonio Huete Jimenez * This header is the interface to a fake sigaction(2) 9*6eef5f0cSAntonio Huete Jimenez * implementation. It provides a POSIX compliant interface 10*6eef5f0cSAntonio Huete Jimenez * to whatever signal handling mechanisms are available. 11*6eef5f0cSAntonio Huete Jimenez * It also provides a Signal() function that is implemented 12*6eef5f0cSAntonio Huete Jimenez * in terms of sigaction(). 13*6eef5f0cSAntonio Huete Jimenez * If not using signal(2) as part of the underlying 14*6eef5f0cSAntonio Huete Jimenez * implementation (USE_SIGNAL or USE_SIGMASK), and 15*6eef5f0cSAntonio Huete Jimenez * NO_SIGNAL is not defined, it also provides a signal() 16*6eef5f0cSAntonio Huete Jimenez * function that calls Signal(). 17*6eef5f0cSAntonio Huete Jimenez * 18*6eef5f0cSAntonio Huete Jimenez * SEE ALSO: 19*6eef5f0cSAntonio Huete Jimenez * sigact.c 20*6eef5f0cSAntonio Huete Jimenez */ 21*6eef5f0cSAntonio Huete Jimenez /* 22*6eef5f0cSAntonio Huete Jimenez * RCSid: 23*6eef5f0cSAntonio Huete Jimenez * $Id: sigact.h,v 1.4 2021/10/14 19:39:17 sjg Exp $ 24*6eef5f0cSAntonio Huete Jimenez */ 25*6eef5f0cSAntonio Huete Jimenez #ifndef _SIGACT_H 26*6eef5f0cSAntonio Huete Jimenez #define _SIGACT_H 27*6eef5f0cSAntonio Huete Jimenez 28*6eef5f0cSAntonio Huete Jimenez #include <sys/cdefs.h> 29*6eef5f0cSAntonio Huete Jimenez 30*6eef5f0cSAntonio Huete Jimenez /* 31*6eef5f0cSAntonio Huete Jimenez * most modern systems use void for signal handlers but 32*6eef5f0cSAntonio Huete Jimenez * not all. 33*6eef5f0cSAntonio Huete Jimenez */ 34*6eef5f0cSAntonio Huete Jimenez #ifndef SIG_HDLR 35*6eef5f0cSAntonio Huete Jimenez # define SIG_HDLR void 36*6eef5f0cSAntonio Huete Jimenez #endif 37*6eef5f0cSAntonio Huete Jimenez 38*6eef5f0cSAntonio Huete Jimenez /* 39*6eef5f0cSAntonio Huete Jimenez * if you want to install this header as signal.h, 40*6eef5f0cSAntonio Huete Jimenez * modify this to pick up the original signal.h 41*6eef5f0cSAntonio Huete Jimenez */ 42*6eef5f0cSAntonio Huete Jimenez #ifndef SIGKILL 43*6eef5f0cSAntonio Huete Jimenez # include <signal.h> 44*6eef5f0cSAntonio Huete Jimenez #endif 45*6eef5f0cSAntonio Huete Jimenez #ifndef SIGKILL 46*6eef5f0cSAntonio Huete Jimenez # include <sys/signal.h> 47*6eef5f0cSAntonio Huete Jimenez #endif 48*6eef5f0cSAntonio Huete Jimenez 49*6eef5f0cSAntonio Huete Jimenez #ifndef SIG_ERR 50*6eef5f0cSAntonio Huete Jimenez # define SIG_ERR (SIG_HDLR (*)())-1 51*6eef5f0cSAntonio Huete Jimenez #endif 52*6eef5f0cSAntonio Huete Jimenez #ifndef BADSIG 53*6eef5f0cSAntonio Huete Jimenez # define BADSIG SIG_ERR 54*6eef5f0cSAntonio Huete Jimenez #endif 55*6eef5f0cSAntonio Huete Jimenez 56*6eef5f0cSAntonio Huete Jimenez #ifndef SA_NOCLDSTOP 57*6eef5f0cSAntonio Huete Jimenez /* we assume we need the fake sigaction */ 58*6eef5f0cSAntonio Huete Jimenez /* sa_flags */ 59*6eef5f0cSAntonio Huete Jimenez #define SA_NOCLDSTOP 1 /* don't send SIGCHLD on child stop */ 60*6eef5f0cSAntonio Huete Jimenez #define SA_RESTART 2 /* re-start I/O */ 61*6eef5f0cSAntonio Huete Jimenez 62*6eef5f0cSAntonio Huete Jimenez /* sigprocmask flags */ 63*6eef5f0cSAntonio Huete Jimenez #define SIG_BLOCK 1 64*6eef5f0cSAntonio Huete Jimenez #define SIG_UNBLOCK 2 65*6eef5f0cSAntonio Huete Jimenez #define SIG_SETMASK 4 66*6eef5f0cSAntonio Huete Jimenez 67*6eef5f0cSAntonio Huete Jimenez /* 68*6eef5f0cSAntonio Huete Jimenez * this is a bit untidy 69*6eef5f0cSAntonio Huete Jimenez */ 70*6eef5f0cSAntonio Huete Jimenez #ifdef _SIGSET_T_ 71*6eef5f0cSAntonio Huete Jimenez typedef _SIGSET_T_ sigset_t; 72*6eef5f0cSAntonio Huete Jimenez #endif 73*6eef5f0cSAntonio Huete Jimenez 74*6eef5f0cSAntonio Huete Jimenez /* 75*6eef5f0cSAntonio Huete Jimenez * POSIX sa_handler should return void, but since we are 76*6eef5f0cSAntonio Huete Jimenez * implementing in terms of something else, it may 77*6eef5f0cSAntonio Huete Jimenez * be appropriate to use the normal SIG_HDLR return type 78*6eef5f0cSAntonio Huete Jimenez */ 79*6eef5f0cSAntonio Huete Jimenez struct sigaction 80*6eef5f0cSAntonio Huete Jimenez { 81*6eef5f0cSAntonio Huete Jimenez SIG_HDLR (*sa_handler)(); 82*6eef5f0cSAntonio Huete Jimenez sigset_t sa_mask; 83*6eef5f0cSAntonio Huete Jimenez int sa_flags; 84*6eef5f0cSAntonio Huete Jimenez }; 85*6eef5f0cSAntonio Huete Jimenez 86*6eef5f0cSAntonio Huete Jimenez 87*6eef5f0cSAntonio Huete Jimenez int sigaction ( int /*sig*/, const struct sigaction */*act*/, struct sigaction */*oact*/ ); 88*6eef5f0cSAntonio Huete Jimenez int sigaddset ( sigset_t */*mask*/, int /*sig*/ ); 89*6eef5f0cSAntonio Huete Jimenez int sigdelset ( sigset_t */*mask*/, int /*sig*/ ); 90*6eef5f0cSAntonio Huete Jimenez int sigemptyset ( sigset_t */*mask*/ ); 91*6eef5f0cSAntonio Huete Jimenez int sigfillset ( sigset_t */*mask*/ ); 92*6eef5f0cSAntonio Huete Jimenez int sigismember ( const sigset_t */*mask*/, int /*sig*/ ); 93*6eef5f0cSAntonio Huete Jimenez int sigpending ( sigset_t */*set*/ ); 94*6eef5f0cSAntonio Huete Jimenez int sigprocmask ( int how, const sigset_t */*set*/, sigset_t */*oset*/ ); 95*6eef5f0cSAntonio Huete Jimenez int sigsuspend ( sigset_t */*mask*/ ); 96*6eef5f0cSAntonio Huete Jimenez 97*6eef5f0cSAntonio Huete Jimenez #ifndef sigmask 98*6eef5f0cSAntonio Huete Jimenez # define sigmask(s) (1<<((s)-1) & (32 - 1)) /* convert SIGnum to mask */ 99*6eef5f0cSAntonio Huete Jimenez #endif 100*6eef5f0cSAntonio Huete Jimenez #if !defined(NSIG) && defined(_NSIG) 101*6eef5f0cSAntonio Huete Jimenez # define NSIG _NSIG 102*6eef5f0cSAntonio Huete Jimenez #endif 103*6eef5f0cSAntonio Huete Jimenez #endif /* ! SA_NOCLDSTOP */ 104*6eef5f0cSAntonio Huete Jimenez #endif /* _SIGACT_H */ 105