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 (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26
27 #include <signal.h>
28
29 #include <bsd/bsd.h>
30
31 /* External references.
32 */
33
34 /* Forward references.
35 */
36
37 /* Static data.
38 */
39
40 extern SIG_PF
41 bsd_signal (int Signal, SIG_PF Handler)
42 {
43 auto SIG_PF previous_handler;
44 #ifdef SUN5_0
45 #ifdef sun
46 previous_handler = sigset (Signal, Handler);
47 #else
48 auto struct sigaction new_action;
49 auto struct sigaction old_action;
50
51 new_action.sa_flags = SA_SIGINFO;
52 new_action.sa_handler = (void (*) ()) Handler;
53 (void) sigemptyset (&new_action.sa_mask);
54 (void) sigaddset (&new_action.sa_mask, Signal);
55
56 (void) sigaction (Signal, &new_action, &old_action);
57
58 previous_handler = (SIG_PF) old_action.sa_handler;
59 #endif
60 #elif defined(linux)
61 previous_handler = sigset (Signal, Handler);
62 #else
63 previous_handler = signal (Signal, Handler);
64 #endif
65 return previous_handler;
66 }
67
68 extern void
69 bsd_signals (void)
70 {
71 static int initialized = 0;
72
73 if (initialized == 0)
74 {
75 initialized = 1;
76 #if !defined(SUN5_0) && !defined(linux)
77 #if defined(SIGHUP)
78 (void) bsd_signal (SIGHUP, SIG_DFL);
79 #endif
80 #if defined(SIGINT)
81 (void) bsd_signal (SIGINT, SIG_DFL);
82 #endif
83 #if defined(SIGQUIT)
84 (void) bsd_signal (SIGQUIT, SIG_DFL);
85 #endif
86 #if defined(SIGILL)
87 (void) bsd_signal (SIGILL, SIG_DFL);
88 #endif
89 #if defined(SIGTRAP)
90 (void) bsd_signal (SIGTRAP, SIG_DFL);
91 #endif
92 #if defined(SIGIOT)
93 (void) bsd_signal (SIGIOT, SIG_DFL);
94 #endif
95 #if defined(SIGABRT)
96 (void) bsd_signal (SIGABRT, SIG_DFL);
97 #endif
98 #if defined(SIGEMT)
99 (void) bsd_signal (SIGEMT, SIG_DFL);
100 #endif
101 #if defined(SIGFPE)
102 (void) bsd_signal (SIGFPE, SIG_DFL);
103 #endif
104 #if defined(SIGBUS)
105 (void) bsd_signal (SIGBUS, SIG_DFL);
106 #endif
107 #if defined(SIGSEGV)
108 (void) bsd_signal (SIGSEGV, SIG_DFL);
109 #endif
110 #if defined(SIGSYS)
111 (void) bsd_signal (SIGSYS, SIG_DFL);
112 #endif
113 #if defined(SIGPIPE)
114 (void) bsd_signal (SIGPIPE, SIG_DFL);
115 #endif
116 #if defined(SIGALRM)
117 (void) bsd_signal (SIGALRM, SIG_DFL);
118 #endif
119 #if defined(SIGTERM)
120 (void) bsd_signal (SIGTERM, SIG_DFL);
121 #endif
122 #if defined(SIGUSR1)
123 (void) bsd_signal (SIGUSR1, SIG_DFL);
124 #endif
125 #if defined(SIGUSR2)
126 (void) bsd_signal (SIGUSR2, SIG_DFL);
127 #endif
128 #if defined(SIGCLD)
129 (void) bsd_signal (SIGCLD, SIG_DFL);
130 #endif
131 #if defined(SIGCHLD)
132 (void) bsd_signal (SIGCHLD, SIG_DFL);
133 #endif
134 #if defined(SIGPWR)
135 (void) bsd_signal (SIGPWR, SIG_DFL);
136 #endif
137 #if defined(SIGWINCH)
138 (void) bsd_signal (SIGWINCH, SIG_DFL);
139 #endif
140 #if defined(SIGURG)
141 (void) bsd_signal (SIGURG, SIG_DFL);
142 #endif
143 #if defined(SIGIO)
144 (void) bsd_signal (SIGIO, SIG_DFL);
145 #else
146 #if defined(SIGPOLL)
147 (void) bsd_signal (SIGPOLL, SIG_DFL);
148 #endif
149 #endif
150 #if defined(SIGTSTP)
151 (void) bsd_signal (SIGTSTP, SIG_DFL);
152 #endif
153 #if defined(SIGCONT)
154 (void) bsd_signal (SIGCONT, SIG_DFL);
155 #endif
156 #if defined(SIGTTIN)
157 (void) bsd_signal (SIGTTIN, SIG_DFL);
158 #endif
159 #if defined(SIGTTOU)
160 (void) bsd_signal (SIGTTOU, SIG_DFL);
161 #endif
162 #if defined(SIGVTALRM)
163 (void) bsd_signal (SIGVTALRM, SIG_DFL);
164 #endif
165 #if defined(SIGPROF)
166 (void) bsd_signal (SIGPROF, SIG_DFL);
167 #endif
168 #if defined(SIGXCPU)
169 (void) bsd_signal (SIGXCPU, SIG_DFL);
170 #endif
171 #if defined(SIGXFSZ)
172 (void) bsd_signal (SIGXFSZ, SIG_DFL);
173 #endif
174 #endif
175 }
176
177 return;
178 }