1 /* vi: set sw=4 ts=4: */
3 * Signal name/number conversion routines.
5 * Copyright 2006 Rob Landley <rob@landley.net>
7 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
12 static const char signals[32][7] = {
13 // SUSv3 says kill must support these, and specifies the numerical values,
14 // http://www.opengroup.org/onlinepubs/009695399/utilities/kill.html
15 // TODO: "[SIG]EXIT" shouldn't work for kill, right?
16 // {0, "EXIT"}, {1, "HUP"}, {2, "INT"}, {3, "QUIT"},
17 // {6, "ABRT"}, {9, "KILL"}, {14, "ALRM"}, {15, "TERM"}
18 // And Posix adds the following:
19 // {SIGILL, "ILL"}, {SIGTRAP, "TRAP"}, {SIGFPE, "FPE"}, {SIGUSR1, "USR1"},
20 // {SIGSEGV, "SEGV"}, {SIGUSR2, "USR2"}, {SIGPIPE, "PIPE"}, {SIGCHLD, "CHLD"},
21 // {SIGCONT, "CONT"}, {SIGSTOP, "STOP"}, {SIGTSTP, "TSTP"}, {SIGTTIN, "TTIN"},
70 [SIGSTKFLT] = "STKFLT",
100 [SIGVTALRM] = "VTALRM",
106 [SIGWINCH ] = "WINCH",
119 // Convert signal name to number.
121 int get_signum(const char *name)
125 i = bb_strtou(name, NULL, 10);
128 if (strncasecmp(name, "SIG", 3) == 0)
130 for (i = 0; i < ARRAY_SIZE(signals); i++)
131 if (strcasecmp(name, signals[i]) == 0)
134 #if ENABLE_DESKTOP && (defined(SIGIOT) || defined(SIGIO))
135 /* These are aliased to other names */
136 if ((name[0] | 0x20) == 'i' && (name[1] | 0x20) == 'o') {
142 if ((name[2] | 0x20) == 't' && !name[3])
151 // Convert signal number to name
153 const char *get_signame(int number)
155 if ((unsigned)number < ARRAY_SIZE(signals)) {
156 if (signals[number][0]) /* if it's not an empty str */
157 return signals[number];
164 // Print the whole signal list
166 void print_signames(void)
170 for (signo = 1; signo < ARRAY_SIZE(signals); signo++) {
171 const char *name = signals[signo];