aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2013-12-16 17:45:44 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2013-12-16 17:45:44 +0100
commit4b26f82c787cf02d600d416159e1a022d278f6f6 (patch)
treefc8dc943399af9d1688a1f68d7b213b22d9665e2
parent3ac1e0d753ca8e918a3b97020ae09058efffe057 (diff)
downloadbusybox-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.c38
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
63int kill_main(int argc, char **argv) 63int 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