[git commit] kill[all[5]]: code shrink

Denys Vlasenko vda.linux at googlemail.com
Mon Dec 16 16:45:44 UTC 2013


commit: http://git.busybox.net/busybox/commit/?id=4b26f82c787cf02d600d416159e1a022d278f6f6
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
kill_main                                            992     947     -45

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 procps/kill.c |   38 ++++++++++++++++++--------------------
 1 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/procps/kill.c b/procps/kill.c
index 8e42137..c5c7a8d 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;
 	}
 


More information about the busybox-cvs mailing list