1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*	Copyright (c) 1988 AT&T	*/
23/*	  All Rights Reserved  	*/
24
25
26/*
27 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
28 * Use is subject to license terms.
29 */
30
31#ifndef _SIGNAL_H
32#define	_SIGNAL_H
33
34#pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.5.3.4 */
35
36#include <sys/feature_tests.h>
37
38#if defined(__EXTENSIONS__) || !defined(_STRICT_STDC) || \
39	defined(__XOPEN_OR_POSIX)
40#include <sys/types.h>	/* need pid_t/uid_t/size_t/clock_t/caddr_t/pthread_t */
41#endif
42
43#include <iso/signal_iso.h>
44#include <sys/signal.h>
45
46/*
47 * Allow global visibility for symbols defined in
48 * C++ "std" namespace in <iso/signal_iso.h>.
49 */
50#if __cplusplus >= 199711L
51using std::sig_atomic_t;
52using std::signal;
53using std::raise;
54#endif
55
56#ifdef	__cplusplus
57extern "C" {
58#endif
59
60
61#if defined(__STDC__)
62
63extern const char	**_sys_siglistp;	/* signal descriptions */
64extern const int	_sys_siglistn;		/* # of signal descriptions */
65
66#if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
67#define	_sys_siglist	_sys_siglistp
68#define	_sys_nsig	_sys_siglistn
69#endif
70
71#if defined(__EXTENSIONS__) || !defined(_STRICT_STDC) || \
72	defined(__XOPEN_OR_POSIX)
73extern int kill(pid_t, int);
74extern int sigaction(int, const struct sigaction *_RESTRICT_KYWD,
75	struct sigaction *_RESTRICT_KYWD);
76#ifndef	_KERNEL
77extern int sigaddset(sigset_t *, int);
78extern int sigdelset(sigset_t *, int);
79extern int sigemptyset(sigset_t *);
80extern int sigfillset(sigset_t *);
81extern int sigismember(const sigset_t *, int);
82#endif
83extern int sigpending(sigset_t *);
84extern int sigprocmask(int, const sigset_t *_RESTRICT_KYWD,
85	sigset_t *_RESTRICT_KYWD);
86extern int sigsuspend(const sigset_t *);
87#endif /* defined(__EXTENSIONS__) || !defined(_STRICT_STDC)... */
88
89#if defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) && \
90	!defined(__XOPEN_OR_POSIX))
91#include <sys/procset.h>
92extern int gsignal(int);
93extern int (*ssignal(int, int (*)(int)))(int);
94extern int sigsend(idtype_t, id_t, int);
95extern int sigsendset(const procset_t *, int);
96extern int sig2str(int, char *);
97extern int str2sig(const char *, int *);
98#define	SIG2STR_MAX	32
99#endif /* defined(__EXTENSIONS__) || (!defined(_STRICT_STDC)... */
100
101#if defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) && \
102	!defined(__XOPEN_OR_POSIX)) || defined(_XPG4_2)
103extern void (*bsd_signal(int, void (*)(int)))(int);
104extern int killpg(pid_t, int);
105extern int siginterrupt(int, int);
106extern int sigaltstack(const stack_t *_RESTRICT_KYWD, stack_t *_RESTRICT_KYWD);
107extern int sighold(int);
108extern int sigignore(int);
109extern int sigpause(int);
110extern int sigrelse(int);
111extern void (*sigset(int, void (*)(int)))(int);
112#endif /* defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) && ... */
113
114/* Marked as LEGACY in SUSv2 and removed in SUSv3 */
115#if defined(__EXTENSIONS__) || \
116	(!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
117	(defined(_XPG4_2) && !defined(_XPG6))
118extern int sigstack(struct sigstack *, struct sigstack *);
119#endif
120
121#if defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) && \
122	!defined(__XOPEN_OR_POSIX)) || (_POSIX_C_SOURCE > 2)
123#include <sys/siginfo.h>
124#include <time.h>
125extern int pthread_kill(pthread_t, int);
126extern int pthread_sigmask(int, const sigset_t *_RESTRICT_KYWD,
127	sigset_t *_RESTRICT_KYWD);
128extern int sigwaitinfo(const sigset_t *_RESTRICT_KYWD,
129	siginfo_t *_RESTRICT_KYWD);
130extern int sigtimedwait(const sigset_t *_RESTRICT_KYWD,
131	siginfo_t *_RESTRICT_KYWD, const struct timespec *_RESTRICT_KYWD);
132extern int sigqueue(pid_t, int, const union sigval);
133#endif /* defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) && */
134
135#else	/* __STDC__ */
136
137extern char	**_sys_siglistp;	/* signal descriptions */
138extern int	_sys_siglistn;		/* # of signal descriptions */
139
140#if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
141#define	_sys_siglist	_sys_siglistp
142#define	_sys_nsig	_sys_siglistn
143#endif
144
145#if defined(__EXTENSIONS__) || defined(__XOPEN_OR_POSIX)
146extern int kill();
147extern int sigaction();
148#ifndef	_KERNEL
149extern int sigaddset();
150extern int sigdelset();
151extern int sigemptyset();
152extern int sigfillset();
153extern int sigismember();
154#endif
155extern int sigpending();
156extern int sigprocmask();
157extern int sigsuspend();
158#endif /* defined(__EXTENSIONS__)... */
159
160#if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || \
161	defined(_XPG4_2)
162extern void (*bsd_signal())();
163extern int killpg();
164extern int siginterrupt();
165#endif /* defined(__EXTENSIONS__) ... */
166
167#if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || \
168	(defined(_XPG4_2) && !defined(_XPG6))
169extern int sigstack();
170#endif
171
172#if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
173extern int gsignal();
174extern int (*ssignal)();
175extern int sigsend();
176extern int sigsendset();
177extern int sig2str();
178extern int str2sig();
179#define	SIG2STR_MAX	32
180#endif
181
182#if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || \
183	defined(_XPG4_2)
184extern int sigaltstack();
185extern int sighold();
186extern int sigignore();
187extern int sigpause();
188extern int sigrelse();
189extern void (*sigset())();
190#endif
191
192#if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || \
193	(_POSIX_C_SOURCE > 2)
194#include <sys/siginfo.h>
195#include <sys/time.h>
196extern int pthread_kill();
197extern int pthread_sigmask();
198extern int sigwaitinfo();
199extern int sigtimedwait();
200extern int sigqueue();
201#endif
202
203#endif	/* __STDC__ */
204
205/*
206 * sigwait() prototype is defined here.
207 */
208
209#if	defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) && \
210	!defined(__XOPEN_OR_POSIX)) || (_POSIX_C_SOURCE - 0 >= 199506L) || \
211	defined(_POSIX_PTHREAD_SEMANTICS)
212
213#if	defined(__STDC__)
214
215#if	(_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
216
217#ifdef __PRAGMA_REDEFINE_EXTNAME
218#pragma redefine_extname sigwait __posix_sigwait
219extern int sigwait(const sigset_t *_RESTRICT_KYWD, int *_RESTRICT_KYWD);
220#else  /* __PRAGMA_REDEFINE_EXTNAME */
221
222extern int __posix_sigwait(const sigset_t *_RESTRICT_KYWD,
223    int *_RESTRICT_KYWD);
224
225#ifdef	__lint
226#define	sigwait __posix_sigwait
227#else	/* !__lint */
228
229static int
230sigwait(const sigset_t *_RESTRICT_KYWD __setp, int *_RESTRICT_KYWD __signo)
231{
232	return (__posix_sigwait(__setp, __signo));
233}
234
235#endif /* !__lint */
236#endif /* __PRAGMA_REDEFINE_EXTNAME */
237
238#else  /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
239
240extern int sigwait(sigset_t *);
241
242#endif  /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
243
244
245#else  /* __STDC__ */
246
247
248#if	(_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
249
250#ifdef __PRAGMA_REDEFINE_EXTNAME
251#pragma redefine_extname sigwait __posix_sigwait
252extern int sigwait();
253#else  /* __PRAGMA_REDEFINE_EXTNAME */
254
255extern int __posix_sigwait();
256
257#ifdef	__lint
258#define	sigwait __posix_sigwait
259#else	/* !__lint */
260
261static int
262sigwait(__setp, __signo)
263	sigset_t *__setp;
264	int *__signo;
265{
266	return (__posix_sigwait(__setp, __signo));
267}
268
269#endif /* !__lint */
270#endif /* __PRAGMA_REDEFINE_EXTNAME */
271
272#else  /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
273
274extern int sigwait();
275
276#endif /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
277
278#endif /* __STDC__ */
279
280#endif /* defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) ... */
281
282#ifdef	__cplusplus
283}
284#endif
285
286#endif	/* _SIGNAL_H */
287