diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2013-12-16 17:45:44 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2013-12-16 17:45:44 +0100 |
commit | 4b26f82c787cf02d600d416159e1a022d278f6f6 (patch) | |
tree | fc8dc943399af9d1688a1f68d7b213b22d9665e2 | |
parent | 3ac1e0d753ca8e918a3b97020ae09058efffe057 (diff) | |
download | busybox-w32-4b26f82c787cf02d600d416159e1a022d278f6f6.tar.gz busybox-w32-4b26f82c787cf02d600d416159e1a022d278f6f6.tar.bz2 busybox-w32-4b26f82c787cf02d600d416159e1a022d278f6f6.zip |
kill[all[5]]: code shrink
function old new delta
kill_main 992 947 -45
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | procps/kill.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/procps/kill.c b/procps/kill.c index 8e4213730..c5c7a8d72 100644 --- a/procps/kill.c +++ b/procps/kill.c | |||
@@ -60,7 +60,7 @@ | |||
60 | * This is needed to avoid collision with kill -9 ... syntax | 60 | * This is needed to avoid collision with kill -9 ... syntax |
61 | */ | 61 | */ |
62 | 62 | ||
63 | int kill_main(int argc, char **argv) | 63 | int kill_main(int argc UNUSED_PARAM, char **argv) |
64 | { | 64 | { |
65 | char *arg; | 65 | char *arg; |
66 | pid_t pid; | 66 | pid_t pid; |
@@ -79,10 +79,9 @@ int kill_main(int argc, char **argv) | |||
79 | #endif | 79 | #endif |
80 | 80 | ||
81 | /* Parse any options */ | 81 | /* Parse any options */ |
82 | argc--; | ||
83 | arg = *++argv; | 82 | arg = *++argv; |
84 | 83 | ||
85 | if (argc < 1 || arg[0] != '-') { | 84 | if (!arg || arg[0] != '-') { |
86 | goto do_it_now; | 85 | goto do_it_now; |
87 | } | 86 | } |
88 | 87 | ||
@@ -91,13 +90,14 @@ int kill_main(int argc, char **argv) | |||
91 | * echo "Died of SIG`kill -l $?`" | 90 | * echo "Died of SIG`kill -l $?`" |
92 | * We try to mimic what kill from coreutils-6.8 does */ | 91 | * We try to mimic what kill from coreutils-6.8 does */ |
93 | if (arg[1] == 'l' && arg[2] == '\0') { | 92 | if (arg[1] == 'l' && arg[2] == '\0') { |
94 | if (argc == 1) { | 93 | arg = *++argv; |
94 | if (!arg) { | ||
95 | /* Print the whole signal list */ | 95 | /* Print the whole signal list */ |
96 | print_signames(); | 96 | print_signames(); |
97 | return 0; | 97 | return 0; |
98 | } | 98 | } |
99 | /* -l <sig list> */ | 99 | /* -l <sig list> */ |
100 | while ((arg = *++argv)) { | 100 | do { |
101 | if (isdigit(arg[0])) { | 101 | if (isdigit(arg[0])) { |
102 | signo = bb_strtou(arg, NULL, 10); | 102 | signo = bb_strtou(arg, NULL, 10); |
103 | if (errno) { | 103 | if (errno) { |
@@ -118,8 +118,8 @@ int kill_main(int argc, char **argv) | |||
118 | } | 118 | } |
119 | printf("%d\n", signo); | 119 | printf("%d\n", signo); |
120 | } | 120 | } |
121 | } | 121 | arg = *++argv; |
122 | /* If they specified -l, we are all done */ | 122 | } while (arg); |
123 | return EXIT_SUCCESS; | 123 | return EXIT_SUCCESS; |
124 | } | 124 | } |
125 | 125 | ||
@@ -127,8 +127,7 @@ int kill_main(int argc, char **argv) | |||
127 | if (killall && arg[1] == 'q' && arg[2] == '\0') { | 127 | if (killall && arg[1] == 'q' && arg[2] == '\0') { |
128 | quiet = 1; | 128 | quiet = 1; |
129 | arg = *++argv; | 129 | arg = *++argv; |
130 | argc--; | 130 | if (!arg) |
131 | if (argc < 1) | ||
132 | bb_show_usage(); | 131 | bb_show_usage(); |
133 | if (arg[0] != '-') | 132 | if (arg[0] != '-') |
134 | goto do_it_now; | 133 | goto do_it_now; |
@@ -140,8 +139,7 @@ int kill_main(int argc, char **argv) | |||
140 | if (killall5 && arg[0] == 'o') | 139 | if (killall5 && arg[0] == 'o') |
141 | goto do_it_now; | 140 | goto do_it_now; |
142 | 141 | ||
143 | if (argc > 1 && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */ | 142 | if (argv[1] && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */ |
144 | argc--; | ||
145 | arg = *++argv; | 143 | arg = *++argv; |
146 | } /* else it must be -SIG */ | 144 | } /* else it must be -SIG */ |
147 | signo = get_signum(arg); | 145 | signo = get_signum(arg); |
@@ -150,7 +148,6 @@ int kill_main(int argc, char **argv) | |||
150 | return EXIT_FAILURE; | 148 | return EXIT_FAILURE; |
151 | } | 149 | } |
152 | arg = *++argv; | 150 | arg = *++argv; |
153 | argc--; | ||
154 | 151 | ||
155 | do_it_now: | 152 | do_it_now: |
156 | pid = getpid(); | 153 | pid = getpid(); |
@@ -168,7 +165,7 @@ int kill_main(int argc, char **argv) | |||
168 | kill(-1, SIGSTOP); | 165 | kill(-1, SIGSTOP); |
169 | /* Signal all processes except those in our session */ | 166 | /* Signal all processes except those in our session */ |
170 | while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID)) != NULL) { | 167 | while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID)) != NULL) { |
171 | int i; | 168 | char **args; |
172 | 169 | ||
173 | if (p->sid == (unsigned)sid | 170 | if (p->sid == (unsigned)sid |
174 | || p->sid == 0 /* compat: kernel thread, don't signal it */ | 171 | || p->sid == 0 /* compat: kernel thread, don't signal it */ |
@@ -180,18 +177,19 @@ int kill_main(int argc, char **argv) | |||
180 | 177 | ||
181 | /* All remaining args must be -o PID options. | 178 | /* All remaining args must be -o PID options. |
182 | * Check p->pid against them. */ | 179 | * Check p->pid against them. */ |
183 | for (i = 0; i < argc; i++) { | 180 | args = argv; |
181 | while (*args) { | ||
184 | pid_t omit; | 182 | pid_t omit; |
185 | 183 | ||
186 | arg = argv[i]; | 184 | arg = *args++; |
187 | if (arg[0] != '-' || arg[1] != 'o') { | 185 | if (arg[0] != '-' || arg[1] != 'o') { |
188 | bb_error_msg("bad option '%s'", arg); | 186 | bb_error_msg("bad option '%s'", arg); |
189 | ret = 1; | 187 | ret = 1; |
190 | goto resume; | 188 | goto resume; |
191 | } | 189 | } |
192 | arg += 2; | 190 | arg += 2; |
193 | if (!arg[0] && argv[++i]) | 191 | if (!arg[0] && *args) |
194 | arg = argv[i]; | 192 | arg = *args++; |
195 | omit = bb_strtoi(arg, NULL, 10); | 193 | omit = bb_strtoi(arg, NULL, 10); |
196 | if (errno) { | 194 | if (errno) { |
197 | bb_error_msg("invalid number '%s'", arg); | 195 | bb_error_msg("invalid number '%s'", arg); |
@@ -213,14 +211,14 @@ int kill_main(int argc, char **argv) | |||
213 | } | 211 | } |
214 | 212 | ||
215 | /* Pid or name is required for kill/killall */ | 213 | /* Pid or name is required for kill/killall */ |
216 | if (argc < 1) { | 214 | if (!arg) { |
217 | bb_error_msg("you need to specify whom to kill"); | 215 | bb_error_msg("you need to specify whom to kill"); |
218 | return EXIT_FAILURE; | 216 | return EXIT_FAILURE; |
219 | } | 217 | } |
220 | 218 | ||
221 | if (killall) { | 219 | if (killall) { |
222 | /* Looks like they want to do a killall. Do that */ | 220 | /* Looks like they want to do a killall. Do that */ |
223 | while (arg) { | 221 | do { |
224 | pid_t* pidList; | 222 | pid_t* pidList; |
225 | 223 | ||
226 | pidList = find_pid_by_name(arg); | 224 | pidList = find_pid_by_name(arg); |
@@ -243,7 +241,7 @@ int kill_main(int argc, char **argv) | |||
243 | } | 241 | } |
244 | free(pidList); | 242 | free(pidList); |
245 | arg = *++argv; | 243 | arg = *++argv; |
246 | } | 244 | } while (arg); |
247 | return errors; | 245 | return errors; |
248 | } | 246 | } |
249 | 247 | ||