xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/signal.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* Copyright (C) 1991-2003, 2004, 2007 Free Software Foundation, Inc.
2*53ee8cc1Swenshuai.xi    This file is part of the GNU C Library.
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi    The GNU C Library is free software; you can redistribute it and/or
5*53ee8cc1Swenshuai.xi    modify it under the terms of the GNU Lesser General Public
6*53ee8cc1Swenshuai.xi    License as published by the Free Software Foundation; either
7*53ee8cc1Swenshuai.xi    version 2.1 of the License, or (at your option) any later version.
8*53ee8cc1Swenshuai.xi 
9*53ee8cc1Swenshuai.xi    The GNU C Library is distributed in the hope that it will be useful,
10*53ee8cc1Swenshuai.xi    but WITHOUT ANY WARRANTY; without even the implied warranty of
11*53ee8cc1Swenshuai.xi    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*53ee8cc1Swenshuai.xi    Lesser General Public License for more details.
13*53ee8cc1Swenshuai.xi 
14*53ee8cc1Swenshuai.xi    You should have received a copy of the GNU Lesser General Public
15*53ee8cc1Swenshuai.xi    License along with the GNU C Library; if not, write to the Free
16*53ee8cc1Swenshuai.xi    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17*53ee8cc1Swenshuai.xi    02111-1307 USA.  */
18*53ee8cc1Swenshuai.xi 
19*53ee8cc1Swenshuai.xi /*
20*53ee8cc1Swenshuai.xi  *	ISO C99 Standard: 7.14 Signal handling <signal.h>
21*53ee8cc1Swenshuai.xi  */
22*53ee8cc1Swenshuai.xi 
23*53ee8cc1Swenshuai.xi #ifndef	_SIGNAL_H
24*53ee8cc1Swenshuai.xi 
25*53ee8cc1Swenshuai.xi #if !defined __need_sig_atomic_t && !defined __need_sigset_t
26*53ee8cc1Swenshuai.xi # define _SIGNAL_H
27*53ee8cc1Swenshuai.xi #endif
28*53ee8cc1Swenshuai.xi 
29*53ee8cc1Swenshuai.xi #include <features.h>
30*53ee8cc1Swenshuai.xi 
31*53ee8cc1Swenshuai.xi __BEGIN_DECLS
32*53ee8cc1Swenshuai.xi 
33*53ee8cc1Swenshuai.xi #include <bits/sigset.h>		/* __sigset_t, __sig_atomic_t.  */
34*53ee8cc1Swenshuai.xi 
35*53ee8cc1Swenshuai.xi /* An integral type that can be modified atomically, without the
36*53ee8cc1Swenshuai.xi    possibility of a signal arriving in the middle of the operation.  */
37*53ee8cc1Swenshuai.xi #if defined __need_sig_atomic_t || defined _SIGNAL_H
38*53ee8cc1Swenshuai.xi # ifndef __sig_atomic_t_defined
39*53ee8cc1Swenshuai.xi #  define __sig_atomic_t_defined
40*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
41*53ee8cc1Swenshuai.xi typedef __sig_atomic_t sig_atomic_t;
42*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
43*53ee8cc1Swenshuai.xi # endif
44*53ee8cc1Swenshuai.xi # undef __need_sig_atomic_t
45*53ee8cc1Swenshuai.xi #endif
46*53ee8cc1Swenshuai.xi 
47*53ee8cc1Swenshuai.xi #if defined __need_sigset_t || (defined _SIGNAL_H && defined __USE_POSIX)
48*53ee8cc1Swenshuai.xi # ifndef __sigset_t_defined
49*53ee8cc1Swenshuai.xi #  define __sigset_t_defined
50*53ee8cc1Swenshuai.xi typedef __sigset_t sigset_t;
51*53ee8cc1Swenshuai.xi # endif
52*53ee8cc1Swenshuai.xi # undef __need_sigset_t
53*53ee8cc1Swenshuai.xi #endif
54*53ee8cc1Swenshuai.xi 
55*53ee8cc1Swenshuai.xi #ifdef _SIGNAL_H
56*53ee8cc1Swenshuai.xi 
57*53ee8cc1Swenshuai.xi #include <bits/types.h>
58*53ee8cc1Swenshuai.xi #include <bits/signum.h>
59*53ee8cc1Swenshuai.xi 
60*53ee8cc1Swenshuai.xi #if defined __USE_XOPEN || defined __USE_XOPEN2K
61*53ee8cc1Swenshuai.xi # ifndef __pid_t_defined
62*53ee8cc1Swenshuai.xi typedef __pid_t pid_t;
63*53ee8cc1Swenshuai.xi #  define __pid_t_defined
64*53ee8cc1Swenshuai.xi #endif
65*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN
66*53ee8cc1Swenshuai.xi # endif
67*53ee8cc1Swenshuai.xi # ifndef __uid_t_defined
68*53ee8cc1Swenshuai.xi typedef __uid_t uid_t;
69*53ee8cc1Swenshuai.xi #  define __uid_t_defined
70*53ee8cc1Swenshuai.xi # endif
71*53ee8cc1Swenshuai.xi #endif	/* Unix98 */
72*53ee8cc1Swenshuai.xi 
73*53ee8cc1Swenshuai.xi 
74*53ee8cc1Swenshuai.xi /* Type of a signal handler.  */
75*53ee8cc1Swenshuai.xi typedef void (*__sighandler_t) (int);
76*53ee8cc1Swenshuai.xi 
77*53ee8cc1Swenshuai.xi /* The X/Open definition of `signal' specifies the SVID semantic.  Use
78*53ee8cc1Swenshuai.xi    the additional function `sysv_signal' when X/Open compatibility is
79*53ee8cc1Swenshuai.xi    requested.  */
80*53ee8cc1Swenshuai.xi extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
81*53ee8cc1Swenshuai.xi      __THROW;
82*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
83*53ee8cc1Swenshuai.xi extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
84*53ee8cc1Swenshuai.xi      __THROW;
85*53ee8cc1Swenshuai.xi #endif
86*53ee8cc1Swenshuai.xi 
87*53ee8cc1Swenshuai.xi /* Set the handler for the signal SIG to HANDLER, returning the old
88*53ee8cc1Swenshuai.xi    handler, or SIG_ERR on error.
89*53ee8cc1Swenshuai.xi    By default `signal' has the BSD semantic.  */
90*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
91*53ee8cc1Swenshuai.xi #ifdef __USE_BSD
92*53ee8cc1Swenshuai.xi extern __sighandler_t signal (int __sig, __sighandler_t __handler)
93*53ee8cc1Swenshuai.xi      __THROW;
94*53ee8cc1Swenshuai.xi #else
95*53ee8cc1Swenshuai.xi /* Make sure the used `signal' implementation is the SVID version. */
96*53ee8cc1Swenshuai.xi # ifdef __REDIRECT_NTH
97*53ee8cc1Swenshuai.xi extern __sighandler_t __REDIRECT_NTH (signal,
98*53ee8cc1Swenshuai.xi 				      (int __sig, __sighandler_t __handler),
99*53ee8cc1Swenshuai.xi 				      __sysv_signal);
100*53ee8cc1Swenshuai.xi # else
101*53ee8cc1Swenshuai.xi #  define signal __sysv_signal
102*53ee8cc1Swenshuai.xi # endif
103*53ee8cc1Swenshuai.xi #endif
104*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
105*53ee8cc1Swenshuai.xi 
106*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN
107*53ee8cc1Swenshuai.xi /* The X/Open definition of `signal' conflicts with the BSD version.
108*53ee8cc1Swenshuai.xi    So they defined another function `bsd_signal'.  */
109*53ee8cc1Swenshuai.xi extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler)
110*53ee8cc1Swenshuai.xi      __THROW;
111*53ee8cc1Swenshuai.xi #endif
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi /* Send signal SIG to process number PID.  If PID is zero,
114*53ee8cc1Swenshuai.xi    send SIG to all processes in the current process's process group.
115*53ee8cc1Swenshuai.xi    If PID is < -1, send SIG to all processes in process group - PID.  */
116*53ee8cc1Swenshuai.xi #ifdef __USE_POSIX
117*53ee8cc1Swenshuai.xi extern int kill (__pid_t __pid, int __sig) __THROW;
118*53ee8cc1Swenshuai.xi #endif /* Use POSIX.  */
119*53ee8cc1Swenshuai.xi 
120*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
121*53ee8cc1Swenshuai.xi /* Send SIG to all processes in process group PGRP.
122*53ee8cc1Swenshuai.xi    If PGRP is zero, send SIG to all processes in
123*53ee8cc1Swenshuai.xi    the current process's process group.  */
124*53ee8cc1Swenshuai.xi extern int killpg (__pid_t __pgrp, int __sig) __THROW;
125*53ee8cc1Swenshuai.xi #endif /* Use BSD || X/Open Unix.  */
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
128*53ee8cc1Swenshuai.xi /* Raise signal SIG, i.e., send SIG to yourself.  */
129*53ee8cc1Swenshuai.xi extern int raise (int __sig) __THROW;
130*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
131*53ee8cc1Swenshuai.xi 
132*53ee8cc1Swenshuai.xi #ifdef __USE_SVID
133*53ee8cc1Swenshuai.xi /* SVID names for the same things.  */
134*53ee8cc1Swenshuai.xi extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
135*53ee8cc1Swenshuai.xi      __THROW;
136*53ee8cc1Swenshuai.xi extern int gsignal (int __sig) __THROW;
137*53ee8cc1Swenshuai.xi #endif /* Use SVID.  */
138*53ee8cc1Swenshuai.xi 
139*53ee8cc1Swenshuai.xi #ifdef __USE_MISC
140*53ee8cc1Swenshuai.xi /* Print a message describing the meaning of the given signal number.  */
141*53ee8cc1Swenshuai.xi extern void psignal (int __sig, __const char *__s);
142*53ee8cc1Swenshuai.xi #endif /* Use misc.  */
143*53ee8cc1Swenshuai.xi 
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi /* The `sigpause' function has two different interfaces.  The original
146*53ee8cc1Swenshuai.xi    BSD definition defines the argument as a mask of the signal, while
147*53ee8cc1Swenshuai.xi    the more modern interface in X/Open defines it as the signal
148*53ee8cc1Swenshuai.xi    number.  We go with the BSD version unless the user explicitly
149*53ee8cc1Swenshuai.xi    selects the X/Open version.
150*53ee8cc1Swenshuai.xi 
151*53ee8cc1Swenshuai.xi    This function is a cancellation point and therefore not marked with
152*53ee8cc1Swenshuai.xi    __THROW.  */
153*53ee8cc1Swenshuai.xi extern int __sigpause (int __sig_or_mask, int __is_sig);
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi #ifdef __FAVOR_BSD
156*53ee8cc1Swenshuai.xi /* Set the mask of blocked signals to MASK,
157*53ee8cc1Swenshuai.xi    wait for a signal to arrive, and then restore the mask.  */
158*53ee8cc1Swenshuai.xi extern int sigpause (int __mask) __THROW __attribute_deprecated__;
159*53ee8cc1Swenshuai.xi #else
160*53ee8cc1Swenshuai.xi # ifdef __USE_XOPEN
161*53ee8cc1Swenshuai.xi #  ifdef __GNUC__
162*53ee8cc1Swenshuai.xi extern int sigpause (int __sig) __asm__ ("__xpg_sigpause");
163*53ee8cc1Swenshuai.xi #  else
164*53ee8cc1Swenshuai.xi /* Remove a signal from the signal mask and suspend the process.  */
165*53ee8cc1Swenshuai.xi #   define sigpause(sig) __sigpause ((sig), 1)
166*53ee8cc1Swenshuai.xi #  endif
167*53ee8cc1Swenshuai.xi # endif
168*53ee8cc1Swenshuai.xi #endif
169*53ee8cc1Swenshuai.xi 
170*53ee8cc1Swenshuai.xi 
171*53ee8cc1Swenshuai.xi #ifdef __USE_BSD
172*53ee8cc1Swenshuai.xi /* None of the following functions should be used anymore.  They are here
173*53ee8cc1Swenshuai.xi    only for compatibility.  A single word (`int') is not guaranteed to be
174*53ee8cc1Swenshuai.xi    enough to hold a complete signal mask and therefore these functions
175*53ee8cc1Swenshuai.xi    simply do not work in many situations.  Use `sigprocmask' instead.  */
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi /* Compute mask for signal SIG.  */
178*53ee8cc1Swenshuai.xi # define sigmask(sig)	__sigmask(sig)
179*53ee8cc1Swenshuai.xi 
180*53ee8cc1Swenshuai.xi /* Block signals in MASK, returning the old mask.  */
181*53ee8cc1Swenshuai.xi extern int sigblock (int __mask) __THROW __attribute_deprecated__;
182*53ee8cc1Swenshuai.xi 
183*53ee8cc1Swenshuai.xi /* Set the mask of blocked signals to MASK, returning the old mask.  */
184*53ee8cc1Swenshuai.xi extern int sigsetmask (int __mask) __THROW __attribute_deprecated__;
185*53ee8cc1Swenshuai.xi 
186*53ee8cc1Swenshuai.xi /* Return currently selected signal mask.  */
187*53ee8cc1Swenshuai.xi extern int siggetmask (void) __THROW __attribute_deprecated__;
188*53ee8cc1Swenshuai.xi #endif /* Use BSD.  */
189*53ee8cc1Swenshuai.xi 
190*53ee8cc1Swenshuai.xi 
191*53ee8cc1Swenshuai.xi #ifdef __USE_MISC
192*53ee8cc1Swenshuai.xi # define NSIG	_NSIG
193*53ee8cc1Swenshuai.xi #endif
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
196*53ee8cc1Swenshuai.xi typedef __sighandler_t sighandler_t;
197*53ee8cc1Swenshuai.xi #endif
198*53ee8cc1Swenshuai.xi 
199*53ee8cc1Swenshuai.xi /* 4.4 BSD uses the name `sig_t' for this.  */
200*53ee8cc1Swenshuai.xi #ifdef __USE_BSD
201*53ee8cc1Swenshuai.xi typedef __sighandler_t sig_t;
202*53ee8cc1Swenshuai.xi #endif
203*53ee8cc1Swenshuai.xi 
204*53ee8cc1Swenshuai.xi #ifdef __USE_POSIX
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi # ifdef __USE_POSIX199309
207*53ee8cc1Swenshuai.xi /* We need `struct timespec' later on.  */
208*53ee8cc1Swenshuai.xi #  define __need_timespec
209*53ee8cc1Swenshuai.xi #  include <time.h>
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi /* Get the `siginfo_t' type plus the needed symbols.  */
212*53ee8cc1Swenshuai.xi #  include <bits/siginfo.h>
213*53ee8cc1Swenshuai.xi # endif
214*53ee8cc1Swenshuai.xi 
215*53ee8cc1Swenshuai.xi /* Clear all signals from SET.  */
216*53ee8cc1Swenshuai.xi extern int sigemptyset (sigset_t *__set) __THROW __nonnull ((1));
217*53ee8cc1Swenshuai.xi 
218*53ee8cc1Swenshuai.xi /* Set all signals in SET.  */
219*53ee8cc1Swenshuai.xi extern int sigfillset (sigset_t *__set) __THROW __nonnull ((1));
220*53ee8cc1Swenshuai.xi 
221*53ee8cc1Swenshuai.xi /* Add SIGNO to SET.  */
222*53ee8cc1Swenshuai.xi extern int sigaddset (sigset_t *__set, int __signo) __THROW __nonnull ((1));
223*53ee8cc1Swenshuai.xi 
224*53ee8cc1Swenshuai.xi /* Remove SIGNO from SET.  */
225*53ee8cc1Swenshuai.xi extern int sigdelset (sigset_t *__set, int __signo) __THROW __nonnull ((1));
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi /* Return 1 if SIGNO is in SET, 0 if not.  */
228*53ee8cc1Swenshuai.xi extern int sigismember (__const sigset_t *__set, int __signo)
229*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1));
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi # ifdef __USE_GNU
232*53ee8cc1Swenshuai.xi /* Return non-empty value is SET is not empty.  */
233*53ee8cc1Swenshuai.xi extern int sigisemptyset (__const sigset_t *__set) __THROW __nonnull ((1));
234*53ee8cc1Swenshuai.xi 
235*53ee8cc1Swenshuai.xi /* Build new signal set by combining the two inputs set using logical AND.  */
236*53ee8cc1Swenshuai.xi extern int sigandset (sigset_t *__set, __const sigset_t *__left,
237*53ee8cc1Swenshuai.xi 		      __const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
238*53ee8cc1Swenshuai.xi 
239*53ee8cc1Swenshuai.xi /* Build new signal set by combining the two inputs set using logical OR.  */
240*53ee8cc1Swenshuai.xi extern int sigorset (sigset_t *__set, __const sigset_t *__left,
241*53ee8cc1Swenshuai.xi 		     __const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
242*53ee8cc1Swenshuai.xi # endif /* GNU */
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi /* Get the system-specific definitions of `struct sigaction'
245*53ee8cc1Swenshuai.xi    and the `SA_*' and `SIG_*'. constants.  */
246*53ee8cc1Swenshuai.xi # include <bits/sigaction.h>
247*53ee8cc1Swenshuai.xi 
248*53ee8cc1Swenshuai.xi /* Get and/or change the set of blocked signals.  */
249*53ee8cc1Swenshuai.xi extern int sigprocmask (int __how, __const sigset_t *__restrict __set,
250*53ee8cc1Swenshuai.xi 			sigset_t *__restrict __oset) __THROW;
251*53ee8cc1Swenshuai.xi 
252*53ee8cc1Swenshuai.xi /* Change the set of blocked signals to SET,
253*53ee8cc1Swenshuai.xi    wait until a signal arrives, and restore the set of blocked signals.
254*53ee8cc1Swenshuai.xi 
255*53ee8cc1Swenshuai.xi    This function is a cancellation point and therefore not marked with
256*53ee8cc1Swenshuai.xi    __THROW.  */
257*53ee8cc1Swenshuai.xi extern int sigsuspend (__const sigset_t *__set) __nonnull ((1));
258*53ee8cc1Swenshuai.xi 
259*53ee8cc1Swenshuai.xi /* Get and/or set the action for signal SIG.  */
260*53ee8cc1Swenshuai.xi extern int sigaction (int __sig, __const struct sigaction *__restrict __act,
261*53ee8cc1Swenshuai.xi 		      struct sigaction *__restrict __oact) __THROW;
262*53ee8cc1Swenshuai.xi 
263*53ee8cc1Swenshuai.xi /* Put in SET all signals that are blocked and waiting to be delivered.  */
264*53ee8cc1Swenshuai.xi extern int sigpending (sigset_t *__set) __THROW __nonnull ((1));
265*53ee8cc1Swenshuai.xi 
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi /* Select any of pending signals from SET or wait for any to arrive.
268*53ee8cc1Swenshuai.xi 
269*53ee8cc1Swenshuai.xi    This function is a cancellation point and therefore not marked with
270*53ee8cc1Swenshuai.xi    __THROW.  */
271*53ee8cc1Swenshuai.xi extern int sigwait (__const sigset_t *__restrict __set, int *__restrict __sig)
272*53ee8cc1Swenshuai.xi      __nonnull ((1, 2));
273*53ee8cc1Swenshuai.xi 
274*53ee8cc1Swenshuai.xi # ifdef __USE_POSIX199309
275*53ee8cc1Swenshuai.xi /* Select any of pending signals from SET and place information in INFO.
276*53ee8cc1Swenshuai.xi 
277*53ee8cc1Swenshuai.xi    This function is a cancellation point and therefore not marked with
278*53ee8cc1Swenshuai.xi    __THROW.  */
279*53ee8cc1Swenshuai.xi extern int sigwaitinfo (__const sigset_t *__restrict __set,
280*53ee8cc1Swenshuai.xi 			siginfo_t *__restrict __info) __nonnull ((1));
281*53ee8cc1Swenshuai.xi 
282*53ee8cc1Swenshuai.xi /* Select any of pending signals from SET and place information in INFO.
283*53ee8cc1Swenshuai.xi    Wait the time specified by TIMEOUT if no signal is pending.
284*53ee8cc1Swenshuai.xi 
285*53ee8cc1Swenshuai.xi    This function is a cancellation point and therefore not marked with
286*53ee8cc1Swenshuai.xi    __THROW.  */
287*53ee8cc1Swenshuai.xi extern int sigtimedwait (__const sigset_t *__restrict __set,
288*53ee8cc1Swenshuai.xi 			 siginfo_t *__restrict __info,
289*53ee8cc1Swenshuai.xi 			 __const struct timespec *__restrict __timeout)
290*53ee8cc1Swenshuai.xi      __nonnull ((1));
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi /* Send signal SIG to the process PID.  Associate data in VAL with the
293*53ee8cc1Swenshuai.xi    signal.  */
294*53ee8cc1Swenshuai.xi extern int sigqueue (__pid_t __pid, int __sig, __const union sigval __val)
295*53ee8cc1Swenshuai.xi      __THROW;
296*53ee8cc1Swenshuai.xi # endif	/* Use POSIX 199306.  */
297*53ee8cc1Swenshuai.xi 
298*53ee8cc1Swenshuai.xi #endif /* Use POSIX.  */
299*53ee8cc1Swenshuai.xi 
300*53ee8cc1Swenshuai.xi #ifdef __USE_BSD
301*53ee8cc1Swenshuai.xi 
302*53ee8cc1Swenshuai.xi /* Names of the signals.  This variable exists only for compatibility.
303*53ee8cc1Swenshuai.xi    Use `strsignal' instead (see <string.h>).  */
304*53ee8cc1Swenshuai.xi extern __const char *__const _sys_siglist[_NSIG];
305*53ee8cc1Swenshuai.xi extern __const char *__const sys_siglist[_NSIG];
306*53ee8cc1Swenshuai.xi 
307*53ee8cc1Swenshuai.xi /* Structure passed to `sigvec'.  */
308*53ee8cc1Swenshuai.xi struct sigvec
309*53ee8cc1Swenshuai.xi   {
310*53ee8cc1Swenshuai.xi     __sighandler_t sv_handler;	/* Signal handler.  */
311*53ee8cc1Swenshuai.xi     int sv_mask;		/* Mask of signals to be blocked.  */
312*53ee8cc1Swenshuai.xi 
313*53ee8cc1Swenshuai.xi     int sv_flags;		/* Flags (see below).  */
314*53ee8cc1Swenshuai.xi # define sv_onstack	sv_flags /* 4.2 BSD compatibility.  */
315*53ee8cc1Swenshuai.xi   };
316*53ee8cc1Swenshuai.xi 
317*53ee8cc1Swenshuai.xi /* Bits in `sv_flags'.  */
318*53ee8cc1Swenshuai.xi # define SV_ONSTACK	(1 << 0)/* Take the signal on the signal stack.  */
319*53ee8cc1Swenshuai.xi # define SV_INTERRUPT	(1 << 1)/* Do not restart system calls.  */
320*53ee8cc1Swenshuai.xi # define SV_RESETHAND	(1 << 2)/* Reset handler to SIG_DFL on receipt.  */
321*53ee8cc1Swenshuai.xi 
322*53ee8cc1Swenshuai.xi 
323*53ee8cc1Swenshuai.xi /* If VEC is non-NULL, set the handler for SIG to the `sv_handler' member
324*53ee8cc1Swenshuai.xi    of VEC.  The signals in `sv_mask' will be blocked while the handler runs.
325*53ee8cc1Swenshuai.xi    If the SV_RESETHAND bit is set in `sv_flags', the handler for SIG will be
326*53ee8cc1Swenshuai.xi    reset to SIG_DFL before `sv_handler' is entered.  If OVEC is non-NULL,
327*53ee8cc1Swenshuai.xi    it is filled in with the old information for SIG.  */
328*53ee8cc1Swenshuai.xi extern int sigvec (int __sig, __const struct sigvec *__vec,
329*53ee8cc1Swenshuai.xi 		   struct sigvec *__ovec) __THROW;
330*53ee8cc1Swenshuai.xi 
331*53ee8cc1Swenshuai.xi 
332*53ee8cc1Swenshuai.xi /* Get machine-dependent `struct sigcontext' and signal subcodes.  */
333*53ee8cc1Swenshuai.xi # include <bits/sigcontext.h>
334*53ee8cc1Swenshuai.xi 
335*53ee8cc1Swenshuai.xi /* Restore the state saved in SCP.  */
336*53ee8cc1Swenshuai.xi extern int sigreturn (struct sigcontext *__scp) __THROW;
337*53ee8cc1Swenshuai.xi 
338*53ee8cc1Swenshuai.xi #endif /*  use BSD.  */
339*53ee8cc1Swenshuai.xi 
340*53ee8cc1Swenshuai.xi 
341*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
342*53ee8cc1Swenshuai.xi # define __need_size_t
343*53ee8cc1Swenshuai.xi # include <stddef.h>
344*53ee8cc1Swenshuai.xi 
345*53ee8cc1Swenshuai.xi /* If INTERRUPT is nonzero, make signal SIG interrupt system calls
346*53ee8cc1Swenshuai.xi    (causing them to fail with EINTR); if INTERRUPT is zero, make system
347*53ee8cc1Swenshuai.xi    calls be restarted after signal SIG.  */
348*53ee8cc1Swenshuai.xi extern int siginterrupt (int __sig, int __interrupt) __THROW;
349*53ee8cc1Swenshuai.xi 
350*53ee8cc1Swenshuai.xi # include <bits/sigstack.h>
351*53ee8cc1Swenshuai.xi # ifdef __USE_XOPEN
352*53ee8cc1Swenshuai.xi /* This will define `ucontext_t' and `mcontext_t'.  */
353*53ee8cc1Swenshuai.xi #  include <sys/ucontext.h>
354*53ee8cc1Swenshuai.xi # endif
355*53ee8cc1Swenshuai.xi 
356*53ee8cc1Swenshuai.xi /* Run signals handlers on the stack specified by SS (if not NULL).
357*53ee8cc1Swenshuai.xi    If OSS is not NULL, it is filled in with the old signal stack status.
358*53ee8cc1Swenshuai.xi    This interface is obsolete and on many platform not implemented.  */
359*53ee8cc1Swenshuai.xi extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
360*53ee8cc1Swenshuai.xi      __THROW __attribute_deprecated__;
361*53ee8cc1Swenshuai.xi 
362*53ee8cc1Swenshuai.xi /* Alternate signal handler stack interface.
363*53ee8cc1Swenshuai.xi    This interface should always be preferred over `sigstack'.  */
364*53ee8cc1Swenshuai.xi extern int sigaltstack (__const struct sigaltstack *__restrict __ss,
365*53ee8cc1Swenshuai.xi 			struct sigaltstack *__restrict __oss) __THROW;
366*53ee8cc1Swenshuai.xi 
367*53ee8cc1Swenshuai.xi #endif /* use BSD or X/Open Unix.  */
368*53ee8cc1Swenshuai.xi 
369*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN_EXTENDED
370*53ee8cc1Swenshuai.xi /* Simplified interface for signal management.  */
371*53ee8cc1Swenshuai.xi 
372*53ee8cc1Swenshuai.xi /* Add SIG to the calling process' signal mask.  */
373*53ee8cc1Swenshuai.xi extern int sighold (int __sig) __THROW;
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi /* Remove SIG from the calling process' signal mask.  */
376*53ee8cc1Swenshuai.xi extern int sigrelse (int __sig) __THROW;
377*53ee8cc1Swenshuai.xi 
378*53ee8cc1Swenshuai.xi /* Set the disposition of SIG to SIG_IGN.  */
379*53ee8cc1Swenshuai.xi extern int sigignore (int __sig) __THROW;
380*53ee8cc1Swenshuai.xi 
381*53ee8cc1Swenshuai.xi /* Set the disposition of SIG.  */
382*53ee8cc1Swenshuai.xi extern __sighandler_t sigset (int __sig, __sighandler_t __disp) __THROW;
383*53ee8cc1Swenshuai.xi #endif
384*53ee8cc1Swenshuai.xi 
385*53ee8cc1Swenshuai.xi #if defined __USE_POSIX199506 || defined __USE_UNIX98
386*53ee8cc1Swenshuai.xi /* Some of the functions for handling signals in threaded programs must
387*53ee8cc1Swenshuai.xi    be defined here.  */
388*53ee8cc1Swenshuai.xi # include <bits/pthreadtypes.h>
389*53ee8cc1Swenshuai.xi # include <bits/sigthread.h>
390*53ee8cc1Swenshuai.xi #endif /* use Unix98 */
391*53ee8cc1Swenshuai.xi 
392*53ee8cc1Swenshuai.xi /* The following functions are used internally in the C library and in
393*53ee8cc1Swenshuai.xi    other code which need deep insights.  */
394*53ee8cc1Swenshuai.xi 
395*53ee8cc1Swenshuai.xi /* Return number of available real-time signal with highest priority.  */
396*53ee8cc1Swenshuai.xi extern int __libc_current_sigrtmin (void) __THROW;
397*53ee8cc1Swenshuai.xi /* Return number of available real-time signal with lowest priority.  */
398*53ee8cc1Swenshuai.xi extern int __libc_current_sigrtmax (void) __THROW;
399*53ee8cc1Swenshuai.xi 
400*53ee8cc1Swenshuai.xi #endif /* signal.h  */
401*53ee8cc1Swenshuai.xi 
402*53ee8cc1Swenshuai.xi __END_DECLS
403*53ee8cc1Swenshuai.xi 
404*53ee8cc1Swenshuai.xi #endif /* not signal.h */
405