aboutsummaryrefslogtreecommitdiff
path: root/libbb/u_signal_names.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2006-12-23 01:06:21 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2006-12-23 01:06:21 +0000
commit2a813e20e2a8720160a059a036cb6c066044f709 (patch)
tree607468384b6707c7b60505da37d2aefc49d355cf /libbb/u_signal_names.c
parent8f6c79240dc7c1e0b819a1a1309240477d8e0d84 (diff)
downloadbusybox-w32-2a813e20e2a8720160a059a036cb6c066044f709.tar.gz
busybox-w32-2a813e20e2a8720160a059a036cb6c066044f709.tar.bz2
busybox-w32-2a813e20e2a8720160a059a036cb6c066044f709.zip
fix recognitions of -SIGname signals
(fix by Jacques LUDER <jacques.luder@thalesgroup.com>)
Diffstat (limited to 'libbb/u_signal_names.c')
-rw-r--r--libbb/u_signal_names.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/libbb/u_signal_names.c b/libbb/u_signal_names.c
index 88311dd9c..eb835e936 100644
--- a/libbb/u_signal_names.c
+++ b/libbb/u_signal_names.c
@@ -15,7 +15,8 @@ static const struct signal_name {
15} signals[] = { 15} signals[] = {
16 // SUSv3 says kill must support these, and specifies the numerical values, 16 // SUSv3 says kill must support these, and specifies the numerical values,
17 // http://www.opengroup.org/onlinepubs/009695399/utilities/kill.html 17 // http://www.opengroup.org/onlinepubs/009695399/utilities/kill.html
18 {0, "0"}, {1, "HUP"}, {2, "INT"}, {3, "QUIT"}, {6, "ABRT"}, {9, "KILL"}, 18 // TODO: "[SIG]EXIT" shouldn't work for kill, right?
19 {0, "EXIT"}, {1, "HUP"}, {2, "INT"}, {3, "QUIT"}, {6, "ABRT"}, {9, "KILL"},
19 {14, "ALRM"}, {15, "TERM"}, 20 {14, "ALRM"}, {15, "TERM"},
20 // And Posix adds the following: 21 // And Posix adds the following:
21 {SIGILL, "ILL"}, {SIGTRAP, "TRAP"}, {SIGFPE, "FPE"}, {SIGUSR1, "USR1"}, 22 {SIGILL, "ILL"}, {SIGTRAP, "TRAP"}, {SIGFPE, "FPE"}, {SIGUSR1, "USR1"},
@@ -30,13 +31,13 @@ int get_signum(const char *name)
30{ 31{
31 int i; 32 int i;
32 33
33 i = atoi(name); 34 i = bb_strtou(name, NULL, 10);
34 if (i) return i; 35 if (!errno) return i;
35 for (i = 0; i < sizeof(signals) / sizeof(struct signal_name); i++) 36 for (i = 0; i < sizeof(signals) / sizeof(struct signal_name); i++)
36 if (!strcasecmp(signals[i].name, name) || 37 if (strcasecmp(name, signals[i].name) == 0
37 (!strncasecmp(signals[i].name, "SIG", 3) 38 || (strncasecmp(name, "SIG", 3) == 0
38 && !strcasecmp(signals[i].name+3, signals[i].name))) 39 && strcasecmp(&name[3], signals[i].name) == 0))
39 return signals[i].number; 40 return signals[i].number;
40 return -1; 41 return -1;
41} 42}
42 43