2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
24 * File: usersig.c $XConsortium: usersig.c /main/4 1996/06/21 17:33:04 ageorge $
27 * (c) Copyright 1989, Hewlett-Packard Company, all rights reserved.
29 * (c) Copyright 1993, 1994 Hewlett-Packard Company *
30 * (c) Copyright 1993, 1994 International Business Machines Corp. *
31 * (c) Copyright 1993, 1994 Sun Microsystems, Inc. *
32 * (c) Copyright 1993, 1994 Novell, Inc. *
35 #define __need_all_signals
36 #include <bms/sbport.h> /* NOTE: sbport.h must be the first include. */
41 #include <bms/Symbolic.h>
42 #include <bms/usersig.h>
43 #include "DtSvcLock.h"
45 static XeSymTable Xe_sig_table = (XeSymTable) NULL;
48 /*-------------------------------------------------------------------------+*/
49 static void Xe_addsig(XeString name, int value)
50 /*-------------------------------------------------------------------------+*/
52 XeSymbol sym = Xe_intern(Xe_sig_table, name);
53 sym->value = (void *)value;
56 /*-------------------------------------------------------------------------+*/
57 static void Xe_init_sig_table(void)
58 /*-------------------------------------------------------------------------+*/
60 # define SIG_HASH_SIZE 32
63 Xe_sig_table = Xe_new_symtab(SIG_HASH_SIZE);
65 Xe_addsig((XeString)"SIGABRT", SIGABRT); /* Add the XOPEN XPG3 signals */
66 Xe_addsig((XeString)"SIGALRM", SIGALRM);
67 Xe_addsig((XeString)"SIGFPE", SIGFPE);
68 Xe_addsig((XeString)"SIGHUP", SIGHUP);
69 Xe_addsig((XeString)"SIGILL", SIGILL);
70 Xe_addsig((XeString)"SIGINT", SIGINT);
71 Xe_addsig((XeString)"SIGKILL", SIGKILL);
72 Xe_addsig((XeString)"SIGPIPE", SIGPIPE);
73 Xe_addsig((XeString)"SIGQUIT", SIGQUIT);
74 Xe_addsig((XeString)"SIGSEGV", SIGSEGV);
75 Xe_addsig((XeString)"SIGTERM", SIGTERM);
76 Xe_addsig((XeString)"SIGUSR1", SIGUSR1);
77 Xe_addsig((XeString)"SIGUSR2", SIGUSR2);
78 Xe_addsig((XeString)"SIGCHLD", SIGCHLD);
79 Xe_addsig((XeString)"SIGCONT", SIGCONT);
80 Xe_addsig((XeString)"SIGSTOP", SIGSTOP);
81 Xe_addsig((XeString)"SIGTSTP", SIGTSTP);
82 Xe_addsig((XeString)"SIGTTIN", SIGTTIN);
83 Xe_addsig((XeString)"SIGTTOU", SIGTTOU);
85 /* 0 is a valid XPG3 signal, but it doesn't have a name. */
87 Xe_addsig((XeString)"ZERO", 0);
89 /* Now add signals that may or may not be around on a given platform */
92 Xe_addsig((XeString)"SIGIO", SIGIO); /* hpux sun apollo */
95 Xe_addsig((XeString)"SIGIO", SIGPOLL); /* hpux sun apollo */
100 Xe_addsig((XeString)"SIGPOLL", SIGPOLL); /* hpux sun apollo */
103 Xe_addsig((XeString)"SIGPOLL", SIGIO); /* hpux sun apollo */
108 Xe_addsig((XeString)"SIGEMT", SIGEMT); /* hpux sun apollo */
112 Xe_addsig((XeString)"SIGBUS", SIGBUS); /* hpux sun apollo */
116 Xe_addsig((XeString)"SIGIOT", SIGIOT); /* hpux sun apollo */
120 Xe_addsig((XeString)"SIGURG", SIGURG); /* hpux sun apollo */
124 Xe_addsig((XeString)"SIGSYS", SIGSYS); /* hpux sun apollo */
128 Xe_addsig((XeString)"SIGTRAP", SIGTRAP); /* hpux sun apollo */
132 Xe_addsig((XeString)"SIGPROF", SIGPROF); /* hpux sun apollo */
136 Xe_addsig((XeString)"SIGCLD", SIGCLD); /* hpux sun apollo */
140 Xe_addsig((XeString)"SIGVTALRM", SIGVTALRM); /* hpux sun apollo */
144 Xe_addsig((XeString)"SIGWINCH", SIGWINCH);
146 _DtSvcProcessUnlock();
150 /*-------------------------------------------------------------------------+*/
151 int XeNameToSignal(XeString name)
152 /*-------------------------------------------------------------------------+*/
154 /* Return SIG_NOT_IN_TABLE if signal name is not in hash table */
160 if (!Xe_sig_table) Xe_init_sig_table();
162 sym = Xe_lookup(Xe_sig_table, name);
164 _DtSvcProcessUnlock();
165 return (sym) ? (int) sym->value : XE_SIG_NOT_IN_TABLE;
168 /*-------------------------------------------------------------------------+*/
169 XeString XeSignalToName(int sig)
170 /*-------------------------------------------------------------------------+*/
174 /* These are XOPEN XPG3 signals */
175 /* ---------------------------- */
176 case SIGABRT: return (XeString)"SIGABRT"; /* "SIGIOT" is an alias */
177 case SIGALRM: return (XeString)"SIGALRM";
178 case SIGFPE: return (XeString)"SIGFPE";
179 case SIGHUP: return (XeString)"SIGHUP";
180 case SIGILL: return (XeString)"SIGILL";
181 case SIGINT: return (XeString)"SIGINT";
182 case SIGKILL: return (XeString)"SIGKILL";
183 case SIGPIPE: return (XeString)"SIGPIPE";
184 case SIGQUIT: return (XeString)"SIGQUIT";
185 case SIGSEGV: return (XeString)"SIGSEGV";
186 case SIGTERM: return (XeString)"SIGTERM";
187 case SIGUSR1: return (XeString)"SIGUSR1";
188 case SIGUSR2: return (XeString)"SIGUSR2";
189 case SIGCHLD: return (XeString)"SIGCHLD"; /* "SIGCLD" is an alias */
190 case SIGCONT: return (XeString)"SIGCONT";
191 case SIGSTOP: return (XeString)"SIGSTOP";
192 case SIGTSTP: return (XeString)"SIGTSTP";
193 case SIGTTIN: return (XeString)"SIGTTIN";
194 case SIGTTOU: return (XeString)"SIGTTOU";
196 /* 0 is a valid signal under XPG3, but it doesn't have a signal name */
198 case 0: return (XeString)"ZERO";
201 /* NOTE: we have ifdef's for cases that are duplicated by other values */
202 /* included but contain no code. This is so when you compare this */
203 /* code to the stuff in Xe_init_sig_table() above, you see a one */
204 /* to one correspondance. */
206 # ifdef SIGIO /* hpux sun apollo */
207 /* (SIGPOLL, SIGTINT are aliases) */
208 case SIGIO: return (XeString)"SIGIO";
211 # ifdef SIGPOLL /* hpux sun apollo */
212 /* ----> Duplicated by SIGIO above
213 case SIGPOLL: return (XeString)"SIGPOLL";
218 # ifdef SIGEMT /* hpux sun apollo */
219 case SIGEMT: return (XeString)"SIGEMT";
222 # ifdef SIGBUS /* hpux sun apollo */
223 case SIGBUS: return (XeString)"SIGBUS";
226 # ifdef SIGIOT /* hpux sun apollo */
227 /* ----> Duplicated by SIGABRT above
229 case SIGIOT: return (XeString)"SIGIOT";
233 # ifdef SIGURG /* hpux sun apollo */
234 case SIGURG: return (XeString)"SIGURG";
237 # ifdef SIGSYS /* hpux sun apollo */
238 case SIGSYS: return (XeString)"SIGSYS";
241 # ifdef SIGTRAP /* hpux sun apollo */
242 case SIGTRAP: return (XeString)"SIGTRAP";
245 # ifdef SIGPROF /* hpux sun apollo */
246 case SIGPROF: return (XeString)"SIGPROF";
249 # ifdef SIGCLD /* hpux sun apollo */
250 /* ----> Duplicated by SIGCHLD above
251 case SIGCLD: return (XeString)"SIGCLD";
255 # ifdef SIGVTALRM /* hpux sun apollo */
256 case SIGVTALRM: return (XeString)"SIGVTALRM";
259 # ifdef SIGWINCH /* sun apollo */
260 case SIGWINCH: return (XeString)"SIGWINCH";
264 default: return XeString_NULL;