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 * @(#)bsd.cc 1.6 06/12/12
27 */
28
29 #pragma ident "@(#)bsd.cc 1.6 06/12/12"
30
31 #include <signal.h>
32
33 #include <bsd/bsd.h>
34
35 /* External references.
36 */
37
38 /* Forward references.
39 */
40
41 /* Static data.
42 */
43
44 extern SIG_PF
45 bsd_signal (int Signal, SIG_PF Handler)
46 {
47 auto SIG_PF previous_handler;
48 #ifdef SUN5_0
49 #ifdef sun
50 previous_handler = sigset (Signal, Handler);
51 #else
52 auto struct sigaction new_action;
53 auto struct sigaction old_action;
54
55 new_action.sa_flags = SA_SIGINFO;
56 new_action.sa_handler = (void (*) ()) Handler;
57 (void) sigemptyset (&new_action.sa_mask);
58 (void) sigaddset (&new_action.sa_mask, Signal);
59
60 (void) sigaction (Signal, &new_action, &old_action);
61
62 previous_handler = (SIG_PF) old_action.sa_handler;
63 #endif
64 #elif defined(linux)
65 previous_handler = sigset (Signal, Handler);
66 #else
67 previous_handler = signal (Signal, Handler);
68 #endif
69 return previous_handler;
70 }
71
72 extern void
73 bsd_signals (void)
74 {
75 static int initialized = 0;
76
77 if (initialized == 0)
78 {
79 initialized = 1;
80 #if !defined(SUN5_0) && !defined(linux)
81 #if defined(SIGHUP)
82 (void) bsd_signal (SIGHUP, SIG_DFL);
83 #endif
84 #if defined(SIGINT)
85 (void) bsd_signal (SIGINT, SIG_DFL);
86 #endif
87 #if defined(SIGQUIT)
88 (void) bsd_signal (SIGQUIT, SIG_DFL);
89 #endif
90 #if defined(SIGILL)
91 (void) bsd_signal (SIGILL, SIG_DFL);
92 #endif
93 #if defined(SIGTRAP)
94 (void) bsd_signal (SIGTRAP, SIG_DFL);
95 #endif
96 #if defined(SIGIOT)
97 (void) bsd_signal (SIGIOT, SIG_DFL);
98 #endif
99 #if defined(SIGABRT)
100 (void) bsd_signal (SIGABRT, SIG_DFL);
101 #endif
102 #if defined(SIGEMT)
103 (void) bsd_signal (SIGEMT, SIG_DFL);
104 #endif
105 #if defined(SIGFPE)
106 (void) bsd_signal (SIGFPE, SIG_DFL);
107 #endif
108 #if defined(SIGBUS)
109 (void) bsd_signal (SIGBUS, SIG_DFL);
110 #endif
111 #if defined(SIGSEGV)
112 (void) bsd_signal (SIGSEGV, SIG_DFL);
113 #endif
114 #if defined(SIGSYS)
115 (void) bsd_signal (SIGSYS, SIG_DFL);
116 #endif
117 #if defined(SIGPIPE)
118 (void) bsd_signal (SIGPIPE, SIG_DFL);
119 #endif
120 #if defined(SIGALRM)
121 (void) bsd_signal (SIGALRM, SIG_DFL);
122 #endif
123 #if defined(SIGTERM)
124 (void) bsd_signal (SIGTERM, SIG_DFL);
125 #endif
126 #if defined(SIGUSR1)
127 (void) bsd_signal (SIGUSR1, SIG_DFL);
128 #endif
129 #if defined(SIGUSR2)
130 (void) bsd_signal (SIGUSR2, SIG_DFL);
131 #endif
132 #if defined(SIGCLD)
133 (void) bsd_signal (SIGCLD, SIG_DFL);
134 #endif
135 #if defined(SIGCHLD)
136 (void) bsd_signal (SIGCHLD, SIG_DFL);
137 #endif
138 #if defined(SIGPWR)
139 (void) bsd_signal (SIGPWR, SIG_DFL);
140 #endif
141 #if defined(SIGWINCH)
142 (void) bsd_signal (SIGWINCH, SIG_DFL);
143 #endif
144 #if defined(SIGURG)
145 (void) bsd_signal (SIGURG, SIG_DFL);
146 #endif
147 #if defined(SIGIO)
148 (void) bsd_signal (SIGIO, SIG_DFL);
149 #else
150 #if defined(SIGPOLL)
151 (void) bsd_signal (SIGPOLL, SIG_DFL);
152 #endif
153 #endif
154 #if defined(SIGTSTP)
155 (void) bsd_signal (SIGTSTP, SIG_DFL);
156 #endif
157 #if defined(SIGCONT)
158 (void) bsd_signal (SIGCONT, SIG_DFL);
159 #endif
160 #if defined(SIGTTIN)
161 (void) bsd_signal (SIGTTIN, SIG_DFL);
162 #endif
163 #if defined(SIGTTOU)
164 (void) bsd_signal (SIGTTOU, SIG_DFL);
165 #endif
166 #if defined(SIGVTALRM)
167 (void) bsd_signal (SIGVTALRM, SIG_DFL);
168 #endif
169 #if defined(SIGPROF)
170 (void) bsd_signal (SIGPROF, SIG_DFL);
171 #endif
172 #if defined(SIGXCPU)
173 (void) bsd_signal (SIGXCPU, SIG_DFL);
174 #endif
175 #if defined(SIGXFSZ)
176 (void) bsd_signal (SIGXFSZ, SIG_DFL);
177 #endif
178 #endif
179 }
180
181 return;
182 }