1*0a6a1f1dSLionel Sambuc /* $NetBSD: signal.h,v 1.55 2015/07/31 12:51:32 kamil Exp $ */
22fe8fb19SBen Gras
32fe8fb19SBen Gras /*-
42fe8fb19SBen Gras * Copyright (c) 1991, 1993
52fe8fb19SBen Gras * The Regents of the University of California. All rights reserved.
62fe8fb19SBen Gras *
72fe8fb19SBen Gras * Redistribution and use in source and binary forms, with or without
82fe8fb19SBen Gras * modification, are permitted provided that the following conditions
92fe8fb19SBen Gras * are met:
102fe8fb19SBen Gras * 1. Redistributions of source code must retain the above copyright
112fe8fb19SBen Gras * notice, this list of conditions and the following disclaimer.
122fe8fb19SBen Gras * 2. Redistributions in binary form must reproduce the above copyright
132fe8fb19SBen Gras * notice, this list of conditions and the following disclaimer in the
142fe8fb19SBen Gras * documentation and/or other materials provided with the distribution.
152fe8fb19SBen Gras * 3. Neither the name of the University nor the names of its contributors
162fe8fb19SBen Gras * may be used to endorse or promote products derived from this software
172fe8fb19SBen Gras * without specific prior written permission.
182fe8fb19SBen Gras *
192fe8fb19SBen Gras * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
202fe8fb19SBen Gras * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
212fe8fb19SBen Gras * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
222fe8fb19SBen Gras * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
232fe8fb19SBen Gras * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
242fe8fb19SBen Gras * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
252fe8fb19SBen Gras * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
262fe8fb19SBen Gras * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
272fe8fb19SBen Gras * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
282fe8fb19SBen Gras * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
292fe8fb19SBen Gras * SUCH DAMAGE.
302fe8fb19SBen Gras *
312fe8fb19SBen Gras * @(#)signal.h 8.3 (Berkeley) 3/30/94
329865aeaaSBen Gras */
339865aeaaSBen Gras
342fe8fb19SBen Gras #ifndef _SIGNAL_H_
352fe8fb19SBen Gras #define _SIGNAL_H_
369865aeaaSBen Gras
372fe8fb19SBen Gras #include <sys/cdefs.h>
382fe8fb19SBen Gras #include <sys/featuretest.h>
392fe8fb19SBen Gras
402fe8fb19SBen Gras #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
412fe8fb19SBen Gras defined(_NETBSD_SOURCE)
422fe8fb19SBen Gras #include <sys/types.h>
439865aeaaSBen Gras #endif
449865aeaaSBen Gras
452fe8fb19SBen Gras #include <sys/signal.h>
469865aeaaSBen Gras
472fe8fb19SBen Gras #if defined(_NETBSD_SOURCE)
482fe8fb19SBen Gras extern const char *const *sys_signame __RENAME(__sys_signame14);
492fe8fb19SBen Gras #ifndef __SYS_SIGLIST_DECLARED
502fe8fb19SBen Gras #define __SYS_SIGLIST_DECLARED
512fe8fb19SBen Gras /* also in unistd.h */
522fe8fb19SBen Gras extern const char *const *sys_siglist __RENAME(__sys_siglist14);
532fe8fb19SBen Gras #endif /* __SYS_SIGLIST_DECLARED */
542fe8fb19SBen Gras extern const int sys_nsig __RENAME(__sys_nsig14);
559865aeaaSBen Gras #endif
569865aeaaSBen Gras
572fe8fb19SBen Gras __BEGIN_DECLS
582fe8fb19SBen Gras int raise(int);
592fe8fb19SBen Gras #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
602fe8fb19SBen Gras defined(_NETBSD_SOURCE)
612fe8fb19SBen Gras int kill(pid_t, int);
622fe8fb19SBen Gras int __libc_sigaction14(int, const struct sigaction * __restrict,
632fe8fb19SBen Gras struct sigaction * __restrict);
649865aeaaSBen Gras
652fe8fb19SBen Gras #if (_POSIX_C_SOURCE - 0L) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \
662fe8fb19SBen Gras defined(_NETBSD_SOURCE)
672fe8fb19SBen Gras int pthread_sigmask(int, const sigset_t * __restrict,
682fe8fb19SBen Gras sigset_t * __restrict);
6984d9c625SLionel Sambuc #if !defined(__minix)
702fe8fb19SBen Gras int pthread_kill(pthread_t, int);
7184d9c625SLionel Sambuc #endif /* !defined(__minix) */
722fe8fb19SBen Gras int __libc_thr_sigsetmask(int, const sigset_t * __restrict,
732fe8fb19SBen Gras sigset_t * __restrict);
742fe8fb19SBen Gras #ifndef __LIBPTHREAD_SOURCE__
752fe8fb19SBen Gras #define pthread_sigmask __libc_thr_sigsetmask
762fe8fb19SBen Gras #endif /* __LIBPTHREAD_SOURCE__ */
77d430c4faSPhilip Homburg #endif
78d430c4faSPhilip Homburg
792fe8fb19SBen Gras #ifndef __LIBC12_SOURCE__
802fe8fb19SBen Gras int sigaction(int, const struct sigaction * __restrict,
812fe8fb19SBen Gras struct sigaction * __restrict) __RENAME(__sigaction14);
829fb2800fSLionel Sambuc #if defined(__minix) && !defined(_SYSTEM)
832fe8fb19SBen Gras int sigaddset(sigset_t *, int) __RENAME(__sigaddset14);
842fe8fb19SBen Gras int sigdelset(sigset_t *, int) __RENAME(__sigdelset14);
852fe8fb19SBen Gras int sigemptyset(sigset_t *) __RENAME(__sigemptyset14);
862fe8fb19SBen Gras int sigfillset(sigset_t *) __RENAME(__sigfillset14);
872fe8fb19SBen Gras int sigismember(const sigset_t *, int) __RENAME(__sigismember14);
8884d9c625SLionel Sambuc #endif /* defined(__minix) && !defined(_SYSTEM) */
892fe8fb19SBen Gras int sigpending(sigset_t *) __RENAME(__sigpending14);
902fe8fb19SBen Gras int sigprocmask(int, const sigset_t * __restrict, sigset_t * __restrict)
912fe8fb19SBen Gras __RENAME(__sigprocmask14);
922fe8fb19SBen Gras int sigsuspend(const sigset_t *) __RENAME(__sigsuspend14);
932fe8fb19SBen Gras
942fe8fb19SBen Gras #if defined(__c99inline) || defined(__SIGSETOPS_BODY)
952fe8fb19SBen Gras
962fe8fb19SBen Gras #if defined(__SIGSETOPS_BODY)
972fe8fb19SBen Gras #undef __c99inline
982fe8fb19SBen Gras #define __c99inline
99b423d7b4SDavid van Moolenbroek #endif
100b423d7b4SDavid van Moolenbroek
1012fe8fb19SBen Gras /* note: this appears in both errno.h and signal.h */
1022fe8fb19SBen Gras #ifndef __errno
1032fe8fb19SBen Gras int *__errno(void);
1042fe8fb19SBen Gras #define __errno __errno
1059865aeaaSBen Gras #endif
1069865aeaaSBen Gras
1072fe8fb19SBen Gras /* the same as "errno" - but signal.h is not allowed to define that */
1082fe8fb19SBen Gras #ifndef ___errno
1092fe8fb19SBen Gras #define ___errno (*__errno())
1102fe8fb19SBen Gras #endif
1112fe8fb19SBen Gras
1129fb2800fSLionel Sambuc #if defined(__minix) && defined(_SYSTEM)
1139fb2800fSLionel Sambuc /* In Minix system code, use alternate versions of the signal mask
1149fb2800fSLionel Sambuc * manipulation functions that do not check signal numbers vs. _NSIG.
1159fb2800fSLionel Sambuc * _NSIG can then represent the user-visible signal set.
1169fb2800fSLionel Sambuc */
1179fb2800fSLionel Sambuc #define sigaddset(set, sig) __sigaddset((set), (sig))
1189fb2800fSLionel Sambuc #define sigdelset(set, sig) __sigdelset((set), (sig))
1199fb2800fSLionel Sambuc #define sigemptyset(set) __sigemptyset((set))
1209fb2800fSLionel Sambuc #define sigfillset(set) __sigfillset((set))
1219fb2800fSLionel Sambuc #define sigismember(set, sig) __sigismember((set), (sig))
1229fb2800fSLionel Sambuc #else
1232fe8fb19SBen Gras __c99inline int
sigaddset(sigset_t * set,int signo)1242fe8fb19SBen Gras sigaddset(sigset_t *set, int signo)
1252fe8fb19SBen Gras {
1262fe8fb19SBen Gras if (signo <= 0 || signo >= _NSIG) {
1272fe8fb19SBen Gras ___errno = 22; /* EINVAL */
1282fe8fb19SBen Gras return (-1);
1292fe8fb19SBen Gras }
1302fe8fb19SBen Gras __sigaddset(set, signo);
1312fe8fb19SBen Gras return (0);
1322fe8fb19SBen Gras }
1332fe8fb19SBen Gras
1342fe8fb19SBen Gras __c99inline int
sigdelset(sigset_t * set,int signo)1352fe8fb19SBen Gras sigdelset(sigset_t *set, int signo)
1362fe8fb19SBen Gras {
1372fe8fb19SBen Gras if (signo <= 0 || signo >= _NSIG) {
1382fe8fb19SBen Gras ___errno = 22; /* EINVAL */
1392fe8fb19SBen Gras return (-1);
1402fe8fb19SBen Gras }
1412fe8fb19SBen Gras __sigdelset(set, signo);
1422fe8fb19SBen Gras return (0);
1432fe8fb19SBen Gras }
1442fe8fb19SBen Gras
1452fe8fb19SBen Gras __c99inline int
sigismember(const sigset_t * set,int signo)1462fe8fb19SBen Gras sigismember(const sigset_t *set, int signo)
1472fe8fb19SBen Gras {
1482fe8fb19SBen Gras if (signo <= 0 || signo >= _NSIG) {
1492fe8fb19SBen Gras ___errno = 22; /* EINVAL */
1502fe8fb19SBen Gras return (-1);
1512fe8fb19SBen Gras }
1522fe8fb19SBen Gras return (__sigismember(set, signo));
1532fe8fb19SBen Gras }
1542fe8fb19SBen Gras
1552fe8fb19SBen Gras __c99inline int
sigemptyset(sigset_t * set)1562fe8fb19SBen Gras sigemptyset(sigset_t *set)
1572fe8fb19SBen Gras {
1582fe8fb19SBen Gras __sigemptyset(set);
1592fe8fb19SBen Gras return (0);
1602fe8fb19SBen Gras }
1612fe8fb19SBen Gras
1622fe8fb19SBen Gras __c99inline int
sigfillset(sigset_t * set)1632fe8fb19SBen Gras sigfillset(sigset_t *set)
1642fe8fb19SBen Gras {
1652fe8fb19SBen Gras __sigfillset(set);
1662fe8fb19SBen Gras return (0);
1672fe8fb19SBen Gras }
16884d9c625SLionel Sambuc #endif /* defined(__minix) && defined(_SYSTEM) */
1692fe8fb19SBen Gras #endif /* __c99inline */
1702fe8fb19SBen Gras #endif /* !__LIBC12_SOURCE__ */
1712fe8fb19SBen Gras
1722fe8fb19SBen Gras /*
1732fe8fb19SBen Gras * X/Open CAE Specification Issue 4 Version 2
1742fe8fb19SBen Gras */
1752fe8fb19SBen Gras #if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
1762fe8fb19SBen Gras (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
1772fe8fb19SBen Gras int killpg(pid_t, int);
1782fe8fb19SBen Gras int siginterrupt(int, int);
1792fe8fb19SBen Gras int sigstack(const struct sigstack *, struct sigstack *);
1802fe8fb19SBen Gras #ifndef __LIBC12_SOURCE__
1812fe8fb19SBen Gras int sigaltstack(const stack_t * __restrict, stack_t * __restrict)
1822fe8fb19SBen Gras __RENAME(__sigaltstack14);
1832fe8fb19SBen Gras #endif
1842fe8fb19SBen Gras int sighold(int);
1852fe8fb19SBen Gras int sigignore(int);
1862fe8fb19SBen Gras int sigpause(int);
1872fe8fb19SBen Gras int sigrelse(int);
1882fe8fb19SBen Gras void (*sigset (int, void (*)(int)))(int);
1892fe8fb19SBen Gras #endif /* _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
1902fe8fb19SBen Gras
1912fe8fb19SBen Gras
1922fe8fb19SBen Gras /*
1932fe8fb19SBen Gras * X/Open CAE Specification Issue 5; IEEE Std 1003.1b-1993 (POSIX)
1942fe8fb19SBen Gras */
1952fe8fb19SBen Gras #if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
1962fe8fb19SBen Gras defined(_NETBSD_SOURCE)
1972fe8fb19SBen Gras int sigwait (const sigset_t * __restrict, int * __restrict);
1982fe8fb19SBen Gras int sigwaitinfo(const sigset_t * __restrict, siginfo_t * __restrict);
1992fe8fb19SBen Gras void psiginfo(const siginfo_t *, const char *);
2002fe8fb19SBen Gras
2012fe8fb19SBen Gras #ifndef __LIBC12_SOURCE__
202*0a6a1f1dSLionel Sambuc #include <sys/timespec.h>
2032fe8fb19SBen Gras int sigtimedwait(const sigset_t * __restrict,
2042fe8fb19SBen Gras siginfo_t * __restrict, const struct timespec * __restrict)
2052fe8fb19SBen Gras __RENAME(__sigtimedwait50);
2062fe8fb19SBen Gras int __sigtimedwait(const sigset_t * __restrict,
2072fe8fb19SBen Gras siginfo_t * __restrict, struct timespec * __restrict)
2082fe8fb19SBen Gras __RENAME(____sigtimedwait50);
2092fe8fb19SBen Gras #endif
2102fe8fb19SBen Gras #endif /* _POSIX_C_SOURCE >= 200112 || _XOPEN_SOURCE_EXTENDED || ... */
2112fe8fb19SBen Gras
2122fe8fb19SBen Gras
2132fe8fb19SBen Gras #if defined(_NETBSD_SOURCE)
2142fe8fb19SBen Gras #ifndef __PSIGNAL_DECLARED
2152fe8fb19SBen Gras #define __PSIGNAL_DECLARED
2162fe8fb19SBen Gras /* also in unistd.h */
2172fe8fb19SBen Gras void psignal(int, const char *);
2182fe8fb19SBen Gras #endif /* __PSIGNAL_DECLARED */
2192fe8fb19SBen Gras int sigblock(int);
2202fe8fb19SBen Gras int sigsetmask(int);
2212fe8fb19SBen Gras #endif /* _NETBSD_SOURCE */
2222fe8fb19SBen Gras
2232fe8fb19SBen Gras #endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE */
2242fe8fb19SBen Gras __END_DECLS
2252fe8fb19SBen Gras
2262fe8fb19SBen Gras #endif /* !_SIGNAL_H_ */
227