xref: /dflybsd-src/contrib/bmake/sigact.h (revision 9e7ae5a0527a977cab412aede3a532cfe2903bbb)
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