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