summaryrefslogtreecommitdiffhomepage
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)
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 @@
* This is needed to avoid collision with kill -9 ... syntax
*/
-int kill_main(int argc, char **argv)
+int kill_main(int argc UNUSED_PARAM, char **argv)
{
char *arg;
pid_t pid;
@@ -79,10 +79,9 @@ int kill_main(int argc, char **argv)
#endif
/* Parse any options */
- argc--;
arg = *++argv;
- if (argc < 1 || arg[0] != '-') {
+ if (!arg || arg[0] != '-') {
goto do_it_now;
}
@@ -91,13 +90,14 @@ int kill_main(int argc, char **argv)
* echo "Died of SIG`kill -l $?`"
* We try to mimic what kill from coreutils-6.8 does */
if (arg[1] == 'l' && arg[2] == '\0') {
- if (argc == 1) {
+ arg = *++argv;
+ if (!arg) {
/* Print the whole signal list */
print_signames();
return 0;
}
/* -l <sig list> */
- while ((arg = *++argv)) {
+ do {
if (isdigit(arg[0])) {
signo = bb_strtou(arg, NULL, 10);
if (errno) {
@@ -118,8 +118,8 @@ int kill_main(int argc, char **argv)
}
printf("%d\n", signo);
}
- }
- /* If they specified -l, we are all done */
+ arg = *++argv;
+ } while (arg);
return EXIT_SUCCESS;
}
@@ -127,8 +127,7 @@ int kill_main(int argc, char **argv)
if (killall && arg[1] == 'q' && arg[2] == '\0') {
quiet = 1;
arg = *++argv;
- argc--;
- if (argc < 1)
+ if (!arg)
bb_show_usage();
if (arg[0] != '-')
goto do_it_now;
@@ -140,8 +139,7 @@ int kill_main(int argc, char **argv)
if (killall5 && arg[0] == 'o')
goto do_it_now;
- if (argc > 1 && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */
- argc--;
+ if (argv[1] && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */
arg = *++argv;
} /* else it must be -SIG */
signo = get_signum(arg);
@@ -150,7 +148,6 @@ int kill_main(int argc, char **argv)
return EXIT_FAILURE;
}
arg = *++argv;
- argc--;
do_it_now:
pid = getpid();
@@ -168,7 +165,7 @@ int kill_main(int argc, char **argv)
kill(-1, SIGSTOP);
/* Signal all processes except those in our session */
while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID)) != NULL) {
- int i;
+ char **args;
if (p->sid == (unsigned)sid
|| p->sid == 0 /* compat: kernel thread, don't signal it */
@@ -180,18 +177,19 @@ int kill_main(int argc, char **argv)
/* All remaining args must be -o PID options.
* Check p->pid against them. */
- for (i = 0; i < argc; i++) {
+ args = argv;
+ while (*args) {
pid_t omit;
- arg = argv[i];
+ arg = *args++;
if (arg[0] != '-' || arg[1] != 'o') {
bb_error_msg("bad option '%s'", arg);
ret = 1;
goto resume;
}
arg += 2;
- if (!arg[0] && argv[++i])
- arg = argv[i];
+ if (!arg[0] && *args)
+ arg = *args++;
omit = bb_strtoi(arg, NULL, 10);
if (errno) {
bb_error_msg("invalid number '%s'", arg);
@@ -213,14 +211,14 @@ int kill_main(int argc, char **argv)
}
/* Pid or name is required for kill/killall */
- if (argc < 1) {
+ if (!arg) {
bb_error_msg("you need to specify whom to kill");
return EXIT_FAILURE;
}
if (killall) {
/* Looks like they want to do a killall. Do that */
- while (arg) {
+ do {
pid_t* pidList;
pidList = find_pid_by_name(arg);
@@ -243,7 +241,7 @@ int kill_main(int argc, char **argv)
}
free(pidList);
arg = *++argv;
- }
+ } while (arg);
return errors;
}