From cb78d58c497f1d6093499a4bb46b6c43855bc065 Mon Sep 17 00:00:00 2001
From: vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Date: Wed, 27 Sep 2006 14:19:16 +0000
Subject: kill: fix bugs (kill -l output was horrible), fix style, constify
 data

git-svn-id: svn://busybox.net/trunk/busybox@16234 69ca8d6d-28ef-0310-b511-8ec308f3f277
---
 include/libbb.h        |   4 +-
 libbb/u_signal_names.c |  13 +++---
 procps/kill.c          | 111 +++++++++++++++++++++++++------------------------
 3 files changed, 64 insertions(+), 64 deletions(-)

diff --git a/include/libbb.h b/include/libbb.h
index 2a5b38144..05927f1de 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -357,8 +357,8 @@ char *dirname (char *path);
 
 int bb_make_directory (char *path, long mode, int flags);
 
-int get_signum(char *name);
-char *get_signame(int number);
+int get_signum(const char *name);
+const char *get_signame(int number);
 
 char *bb_simplify_path(const char *path);
 
diff --git a/libbb/u_signal_names.c b/libbb/u_signal_names.c
index b9afc6ff1..3f8c04c35 100644
--- a/libbb/u_signal_names.c
+++ b/libbb/u_signal_names.c
@@ -9,8 +9,8 @@
 
 #include "libbb.h"
 
-static struct signal_name {
-	char *name;
+static const struct signal_name {
+	char name[5];
 	int number;
 } signals[] = {
 	// SUSv3 says kill must support these, and specifies the numerical values,
@@ -26,7 +26,7 @@ static struct signal_name {
 
 // Convert signal name to number.
 
-int get_signum(char *name)
+int get_signum(const char *name)
 {
 	int i;
 
@@ -42,18 +42,17 @@ int get_signum(char *name)
 
 // Convert signal number to name
 
-char *get_signame(int number)
+const char *get_signame(int number)
 {
 	int i;
 	static char buf[8];
 
-	itoa_to_buf(number, buf, 8);
 	for (i=0; i < sizeof(signals) / sizeof(struct signal_name); i++) {
 		if (number == signals[i].number) {
-			sprintf("SIG%s", signals[i].name);
-			break;
+			return signals[i].name;
 		}
 	}
 
+	itoa_to_buf(number, buf, 8);
 	return buf;
 }
diff --git a/procps/kill.c b/procps/kill.c
index b7a2985c8..654467ac1 100644
--- a/procps/kill.c
+++ b/procps/kill.c
@@ -12,118 +12,119 @@
 
 int kill_main(int argc, char **argv)
 {
-	int killall, signo = SIGTERM, errors = 0, quiet=0;
+	char *arg;
+	int killall, signo = SIGTERM, errors = 0, quiet = 0;
 
 	killall = (ENABLE_KILLALL && bb_applet_name[4]=='a') ? 1 : 0;
 
 	/* Parse any options */
-	if (argc < 2)
+	argc--;
+	arg = *++argv;
+	if (argc<1)
 		bb_show_usage();
 
-	if(argv[1][0] != '-'){
-		argv++;
-		argc--;
+	if (arg[0]!='-') {
 		goto do_it_now;
 	}
 
 	/* The -l option, which prints out signal names. */
-	if(argv[1][1]=='l' && argv[1][2]=='\0'){
-		if(argc==2) {
+	if (arg[1]=='l' && arg[2]=='\0') {
+		const char *name;
+		if (argc==1) {
 			/* Print the whole signal list */
 			int col = 0;
-
-			for(signo = 0;;) {
-				char *name = get_signame(++signo);
-				if (isdigit(*name)) break;
-
-				if (col > 60) {
-					printf("\n");
+			for (signo = 1; signo<32; signo++) {
+				name = get_signame(signo);
+				if (isdigit(name[0])) continue;
+				if (col > 66) {
+					puts("");
 					col = 0;
 				}
-				col += printf("%2d) %-16s", signo, name);
+				col += printf("%2d) %-6s", signo, name);
 			}
-			printf("\n");
-		} else {
-			for(argv++; *argv; argv++) {
-				char *name;
-
-				if (isdigit(**argv)) name = get_signame(atoi(*argv));
-				else {
-					int temp = get_signum(*argv);
-					if (temp<0)
-						bb_error_msg_and_die("unknown signal %s", *argv);
-					name = get_signame(temp);
+			puts("");
+		} else { /* -l <sig list> */
+			while ((arg = *++argv)!=NULL) {
+				if (isdigit(arg[0])) {
+					signo = atoi(arg);
+					name = get_signame(signo);
+				} else {
+					signo = get_signum(arg);
+					if (signo<0)
+						bb_error_msg_and_die("unknown signal '%s'", arg);
+					name = get_signame(signo);
 				}
-				puts(name);
+				printf("%2d) %s\n", signo, name);
 			}
 		}
-		/* If they specified -l, were all done */
+		/* If they specified -l, we are all done */
 		return EXIT_SUCCESS;
 	}
 
 	/* The -q quiet option */
-	if(killall && argv[1][1]=='q' && argv[1][2]=='\0'){
-		quiet++;
-		argv++;
+	if (killall && arg[1]=='q' && arg[2]=='\0') {
+		quiet = 1;
+		arg = *++argv;
 		argc--;
-		if(argc<2 || argv[1][0] != '-'){
-			goto do_it_now;
-		}
+		if (argc<1) bb_show_usage();
+		if (arg[0]!='-') goto do_it_now;
 	}
 
-	if(0>(signo = get_signum(argv[1]+1)))
-		bb_error_msg_and_die( "bad signal name '%s'", argv[1]+1);
-	argv+=2;
-	argc-=2;
+	/* -SIG */
+	signo = get_signum(&arg[1]);
+	if (signo<0)
+		bb_error_msg_and_die("bad signal name '%s'", &arg[1]);
+	arg = *++argv;
+	argc--;
 
 do_it_now:
 
 	/* Pid or name required */
-	if (argc <= 0)
+	if (argc<1)
 		bb_show_usage();
 
 	if (!killall) {
 		/* Looks like they want to do a kill. Do that */
-		while (--argc >= 0) {
+		while (arg) {
 			int pid;
 
-			if (!isdigit(**argv) && **argv != '-')
-				bb_error_msg_and_die( "Bad PID '%s'", *argv);
-			pid = strtol(*argv, NULL, 0);
-			if (kill(pid, signo) != 0) {
-				bb_perror_msg( "Could not kill pid '%d'", pid);
+			if (!isdigit(arg[0]) && arg[0]!='-')
+				bb_error_msg_and_die("bad pid '%s'", arg);
+			pid = strtol(arg, NULL, 0);
+			if (kill(pid, signo)!=0) {
+				bb_perror_msg("cannot kill pid %d", pid);
 				errors++;
 			}
-			argv++;
+			arg = *++argv;
 		}
 
 	} else {
-		pid_t myPid=getpid();
+		pid_t myPid = getpid();
 
 		/* Looks like they want to do a killall.  Do that */
-		while (--argc >= 0) {
+		while (arg) {
 			long* pidList;
 
-			pidList = find_pid_by_name(*argv);
+			pidList = find_pid_by_name(arg);
 			if (!pidList || *pidList<=0) {
 				errors++;
 				if (quiet==0)
-					bb_error_msg( "%s: no process killed", *argv);
+					bb_error_msg("%s: no process killed", arg);
 			} else {
 				long *pl;
 
-				for(pl = pidList; *pl !=0 ; pl++) {
+				for (pl = pidList; *pl!=0 ; pl++) {
 					if (*pl==myPid)
 						continue;
-					if (kill(*pl, signo) != 0) {
+					if (kill(*pl, signo)!=0) {
 						errors++;
-						if (quiet==0)
-							bb_perror_msg( "Could not kill pid '%ld'", *pl);
+						if (!quiet)
+							bb_perror_msg("cannot kill pid %ld", *pl);
 					}
 				}
 			}
 			free(pidList);
-			argv++;
+			arg = *++argv;
 		}
 	}
 
-- 
cgit v1.2.3-55-g6feb