12fe8fb19SBen Gras /* $NetBSD: signal.h,v 1.54 2010/08/27 08:40:38 christos 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); 698ccb12bbSBen Gras #ifndef __minix 702fe8fb19SBen Gras int pthread_kill(pthread_t, int); 718ccb12bbSBen Gras #endif 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); 82*9fb2800fSLionel 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); 882fe8fb19SBen Gras #endif 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 112*9fb2800fSLionel Sambuc #if defined(__minix) && defined(_SYSTEM) 113*9fb2800fSLionel Sambuc /* In Minix system code, use alternate versions of the signal mask 114*9fb2800fSLionel Sambuc * manipulation functions that do not check signal numbers vs. _NSIG. 115*9fb2800fSLionel Sambuc * _NSIG can then represent the user-visible signal set. 116*9fb2800fSLionel Sambuc */ 117*9fb2800fSLionel Sambuc #define sigaddset(set, sig) __sigaddset((set), (sig)) 118*9fb2800fSLionel Sambuc #define sigdelset(set, sig) __sigdelset((set), (sig)) 119*9fb2800fSLionel Sambuc #define sigemptyset(set) __sigemptyset((set)) 120*9fb2800fSLionel Sambuc #define sigfillset(set) __sigfillset((set)) 121*9fb2800fSLionel Sambuc #define sigismember(set, sig) __sigismember((set), (sig)) 122*9fb2800fSLionel Sambuc #else 1232fe8fb19SBen Gras __c99inline int 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 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 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 1562fe8fb19SBen Gras sigemptyset(sigset_t *set) 1572fe8fb19SBen Gras { 1582fe8fb19SBen Gras __sigemptyset(set); 1592fe8fb19SBen Gras return (0); 1602fe8fb19SBen Gras } 1612fe8fb19SBen Gras 1622fe8fb19SBen Gras __c99inline int 1632fe8fb19SBen Gras sigfillset(sigset_t *set) 1642fe8fb19SBen Gras { 1652fe8fb19SBen Gras __sigfillset(set); 1662fe8fb19SBen Gras return (0); 1672fe8fb19SBen Gras } 1688ccb12bbSBen Gras #endif 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__ 2022fe8fb19SBen Gras struct timespec; 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