diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-12-04 10:05:28 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-12-04 10:05:28 +0000 |
commit | 5f934b07853658069435a4b42c17277e6478c534 (patch) | |
tree | e34df9d92109065266a9b2df19ff2a58400294f1 /libbb/u_signal_names.c | |
parent | d0bbbdcd6eefd249637f153f9d29b37c7f545e33 (diff) | |
download | busybox-w32-5f934b07853658069435a4b42c17277e6478c534.tar.gz busybox-w32-5f934b07853658069435a4b42c17277e6478c534.tar.bz2 busybox-w32-5f934b07853658069435a4b42c17277e6478c534.zip |
guard against SIGxxx >= 32 (no code changes on i386)
Diffstat (limited to 'libbb/u_signal_names.c')
-rw-r--r-- | libbb/u_signal_names.c | 73 |
1 files changed, 39 insertions, 34 deletions
diff --git a/libbb/u_signal_names.c b/libbb/u_signal_names.c index ed3bb5c5b..43015b7a1 100644 --- a/libbb/u_signal_names.c +++ b/libbb/u_signal_names.c | |||
@@ -9,7 +9,9 @@ | |||
9 | 9 | ||
10 | #include "libbb.h" | 10 | #include "libbb.h" |
11 | 11 | ||
12 | static const char signals[32][7] = { | 12 | #define KILL_MAX_SIG 32 |
13 | |||
14 | static const char signals[KILL_MAX_SIG][7] = { | ||
13 | // SUSv3 says kill must support these, and specifies the numerical values, | 15 | // SUSv3 says kill must support these, and specifies the numerical values, |
14 | // http://www.opengroup.org/onlinepubs/009695399/utilities/kill.html | 16 | // http://www.opengroup.org/onlinepubs/009695399/utilities/kill.html |
15 | // TODO: "[SIG]EXIT" shouldn't work for kill, right? | 17 | // TODO: "[SIG]EXIT" shouldn't work for kill, right? |
@@ -20,98 +22,101 @@ static const char signals[32][7] = { | |||
20 | // {SIGSEGV, "SEGV"}, {SIGUSR2, "USR2"}, {SIGPIPE, "PIPE"}, {SIGCHLD, "CHLD"}, | 22 | // {SIGSEGV, "SEGV"}, {SIGUSR2, "USR2"}, {SIGPIPE, "PIPE"}, {SIGCHLD, "CHLD"}, |
21 | // {SIGCONT, "CONT"}, {SIGSTOP, "STOP"}, {SIGTSTP, "TSTP"}, {SIGTTIN, "TTIN"}, | 23 | // {SIGCONT, "CONT"}, {SIGSTOP, "STOP"}, {SIGTSTP, "TSTP"}, {SIGTTIN, "TTIN"}, |
22 | // {SIGTTOU, "TTOU"} | 24 | // {SIGTTOU, "TTOU"} |
25 | |||
26 | /* Believe it or not, but some arches have more than 32 SIGs! | ||
27 | * HPPA: SIGSTKFLT == 36. We don't include those. */ | ||
23 | [0] = "EXIT", | 28 | [0] = "EXIT", |
24 | #ifdef SIGHUP | 29 | #if defined SIGHUP && SIGHUP < KILL_MAX_SIG |
25 | [SIGHUP ] = "HUP", | 30 | [SIGHUP ] = "HUP", |
26 | #endif | 31 | #endif |
27 | #ifdef SIGINT | 32 | #if defined SIGINT && SIGINT < KILL_MAX_SIG |
28 | [SIGINT ] = "INT", | 33 | [SIGINT ] = "INT", |
29 | #endif | 34 | #endif |
30 | #ifdef SIGQUIT | 35 | #if defined SIGQUIT && SIGQUIT < KILL_MAX_SIG |
31 | [SIGQUIT ] = "QUIT", | 36 | [SIGQUIT ] = "QUIT", |
32 | #endif | 37 | #endif |
33 | #ifdef SIGILL | 38 | #if defined SIGILL && SIGILL < KILL_MAX_SIG |
34 | [SIGILL ] = "ILL", | 39 | [SIGILL ] = "ILL", |
35 | #endif | 40 | #endif |
36 | #ifdef SIGTRAP | 41 | #if defined SIGTRAP && SIGTRAP < KILL_MAX_SIG |
37 | [SIGTRAP ] = "TRAP", | 42 | [SIGTRAP ] = "TRAP", |
38 | #endif | 43 | #endif |
39 | #ifdef SIGABRT | 44 | #if defined SIGABRT && SIGABRT < KILL_MAX_SIG |
40 | [SIGABRT ] = "ABRT", | 45 | [SIGABRT ] = "ABRT", |
41 | #endif | 46 | #endif |
42 | #ifdef SIGBUS | 47 | #if defined SIGBUS && SIGBUS < KILL_MAX_SIG |
43 | [SIGBUS ] = "BUS", | 48 | [SIGBUS ] = "BUS", |
44 | #endif | 49 | #endif |
45 | #ifdef SIGFPE | 50 | #if defined SIGFPE && SIGFPE < KILL_MAX_SIG |
46 | [SIGFPE ] = "FPE", | 51 | [SIGFPE ] = "FPE", |
47 | #endif | 52 | #endif |
48 | #ifdef SIGKILL | 53 | #if defined SIGKILL && SIGKILL < KILL_MAX_SIG |
49 | [SIGKILL ] = "KILL", | 54 | [SIGKILL ] = "KILL", |
50 | #endif | 55 | #endif |
51 | #ifdef SIGUSR1 | 56 | #if defined SIGUSR1 && SIGUSR1 < KILL_MAX_SIG |
52 | [SIGUSR1 ] = "USR1", | 57 | [SIGUSR1 ] = "USR1", |
53 | #endif | 58 | #endif |
54 | #ifdef SIGSEGV | 59 | #if defined SIGSEGV && SIGSEGV < KILL_MAX_SIG |
55 | [SIGSEGV ] = "SEGV", | 60 | [SIGSEGV ] = "SEGV", |
56 | #endif | 61 | #endif |
57 | #ifdef SIGUSR2 | 62 | #if defined SIGUSR2 && SIGUSR2 < KILL_MAX_SIG |
58 | [SIGUSR2 ] = "USR2", | 63 | [SIGUSR2 ] = "USR2", |
59 | #endif | 64 | #endif |
60 | #ifdef SIGPIPE | 65 | #if defined SIGPIPE && SIGPIPE < KILL_MAX_SIG |
61 | [SIGPIPE ] = "PIPE", | 66 | [SIGPIPE ] = "PIPE", |
62 | #endif | 67 | #endif |
63 | #ifdef SIGALRM | 68 | #if defined SIGALRM && SIGALRM < KILL_MAX_SIG |
64 | [SIGALRM ] = "ALRM", | 69 | [SIGALRM ] = "ALRM", |
65 | #endif | 70 | #endif |
66 | #ifdef SIGTERM | 71 | #if defined SIGTERM && SIGTERM < KILL_MAX_SIG |
67 | [SIGTERM ] = "TERM", | 72 | [SIGTERM ] = "TERM", |
68 | #endif | 73 | #endif |
69 | #ifdef SIGSTKFLT | 74 | #if defined SIGSTKFLT && SIGSTKFLT < KILL_MAX_SIG |
70 | [SIGSTKFLT] = "STKFLT", | 75 | [SIGSTKFLT] = "STKFLT", |
71 | #endif | 76 | #endif |
72 | #ifdef SIGCHLD | 77 | #if defined SIGCHLD && SIGCHLD < KILL_MAX_SIG |
73 | [SIGCHLD ] = "CHLD", | 78 | [SIGCHLD ] = "CHLD", |
74 | #endif | 79 | #endif |
75 | #ifdef SIGCONT | 80 | #if defined SIGCONT && SIGCONT < KILL_MAX_SIG |
76 | [SIGCONT ] = "CONT", | 81 | [SIGCONT ] = "CONT", |
77 | #endif | 82 | #endif |
78 | #ifdef SIGSTOP | 83 | #if defined SIGSTOP && SIGSTOP < KILL_MAX_SIG |
79 | [SIGSTOP ] = "STOP", | 84 | [SIGSTOP ] = "STOP", |
80 | #endif | 85 | #endif |
81 | #ifdef SIGTSTP | 86 | #if defined SIGTSTP && SIGTSTP < KILL_MAX_SIG |
82 | [SIGTSTP ] = "TSTP", | 87 | [SIGTSTP ] = "TSTP", |
83 | #endif | 88 | #endif |
84 | #ifdef SIGTTIN | 89 | #if defined SIGTTIN && SIGTTIN < KILL_MAX_SIG |
85 | [SIGTTIN ] = "TTIN", | 90 | [SIGTTIN ] = "TTIN", |
86 | #endif | 91 | #endif |
87 | #ifdef SIGTTOU | 92 | #if defined SIGTTOU && SIGTTOU < KILL_MAX_SIG |
88 | [SIGTTOU ] = "TTOU", | 93 | [SIGTTOU ] = "TTOU", |
89 | #endif | 94 | #endif |
90 | #ifdef SIGURG | 95 | #if defined SIGURG && SIGURG < KILL_MAX_SIG |
91 | [SIGURG ] = "URG", | 96 | [SIGURG ] = "URG", |
92 | #endif | 97 | #endif |
93 | #ifdef SIGXCPU | 98 | #if defined SIGXCPU && SIGXCPU < KILL_MAX_SIG |
94 | [SIGXCPU ] = "XCPU", | 99 | [SIGXCPU ] = "XCPU", |
95 | #endif | 100 | #endif |
96 | #ifdef SIGXFSZ | 101 | #if defined SIGXFSZ && SIGXFSZ < KILL_MAX_SIG |
97 | [SIGXFSZ ] = "XFSZ", | 102 | [SIGXFSZ ] = "XFSZ", |
98 | #endif | 103 | #endif |
99 | #ifdef SIGVTALRM | 104 | #if defined SIGVTALRM && SIGVTALRM < KILL_MAX_SIG |
100 | [SIGVTALRM] = "VTALRM", | 105 | [SIGVTALRM] = "VTALRM", |
101 | #endif | 106 | #endif |
102 | #ifdef SIGPROF | 107 | #if defined SIGPROF && SIGPROF < KILL_MAX_SIG |
103 | [SIGPROF ] = "PROF", | 108 | [SIGPROF ] = "PROF", |
104 | #endif | 109 | #endif |
105 | #ifdef SIGWINCH | 110 | #if defined SIGWINCH && SIGWINCH < KILL_MAX_SIG |
106 | [SIGWINCH ] = "WINCH", | 111 | [SIGWINCH ] = "WINCH", |
107 | #endif | 112 | #endif |
108 | #ifdef SIGPOLL | 113 | #if defined SIGPOLL && SIGPOLL < KILL_MAX_SIG |
109 | [SIGPOLL ] = "POLL", | 114 | [SIGPOLL ] = "POLL", |
110 | #endif | 115 | #endif |
111 | #ifdef SIGPWR | 116 | #if defined SIGPWR && SIGPWR < KILL_MAX_SIG |
112 | [SIGPWR ] = "PWR", | 117 | [SIGPWR ] = "PWR", |
113 | #endif | 118 | #endif |
114 | #ifdef SIGSYS | 119 | #if defined SIGSYS && SIGSYS < KILL_MAX_SIG |
115 | [SIGSYS ] = "SYS", | 120 | [SIGSYS ] = "SYS", |
116 | #endif | 121 | #endif |
117 | }; | 122 | }; |
@@ -134,11 +139,11 @@ int get_signum(const char *name) | |||
134 | #if ENABLE_DESKTOP && (defined(SIGIOT) || defined(SIGIO)) | 139 | #if ENABLE_DESKTOP && (defined(SIGIOT) || defined(SIGIO)) |
135 | /* These are aliased to other names */ | 140 | /* These are aliased to other names */ |
136 | if ((name[0] | 0x20) == 'i' && (name[1] | 0x20) == 'o') { | 141 | if ((name[0] | 0x20) == 'i' && (name[1] | 0x20) == 'o') { |
137 | #ifdef SIGIO | 142 | #if defined SIGIO |
138 | if (!name[2]) | 143 | if (!name[2]) |
139 | return SIGIO; | 144 | return SIGIO; |
140 | #endif | 145 | #endif |
141 | #ifdef SIGIOT | 146 | #if defined SIGIOT |
142 | if ((name[2] | 0x20) == 't' && !name[3]) | 147 | if ((name[2] | 0x20) == 't' && !name[3]) |
143 | return SIGIOT; | 148 | return SIGIOT; |
144 | #endif | 149 | #endif |