From 19b6f48990b02aeca211b480625b95b2033c1017 Mon Sep 17 00:00:00 2001 From: Craig Small Date: Tue, 2 Oct 2012 21:56:38 +1000 Subject: [PATCH] kill -PID fixed Bug-Debian: http://bugs.debian.org/688731 kill would not permit negative PIDs and thought they were options. kill now explicitly checks for unknown options and if they are numeric assumes they are negative PIDs. The first negative PID stops any further option processing. Signed-off-by: Craig Small --- skill.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/skill.c b/skill.c index 94bf9c93..a1f89e0a 100644 --- a/skill.c +++ b/skill.c @@ -363,6 +363,7 @@ static void __attribute__ ((__noreturn__)) { int signo, i; int sigopt = 0; + int loop = 1; long pid; int exitvalue = EXIT_SUCCESS; @@ -389,7 +390,8 @@ static void __attribute__ ((__noreturn__)) else sigopt++; - while ((i = getopt_long(argc, argv, "l::Ls:hV", longopts, NULL)) != -1) + opterr=0; /* suppress errors on -123 */ + while (loop == 1 && (i = getopt_long(argc, argv, "l::Ls:hV", longopts, NULL)) != -1) switch (i) { case 'l': if (optarg) { @@ -416,6 +418,13 @@ static void __attribute__ ((__noreturn__)) case 'V': display_kill_version(); exit(EXIT_SUCCESS); + case '?': + if (!isdigit(optopt)) { + xwarnx(_("invalid argument %c"), optopt); + kill_usage(stderr); + } + loop=0; + break; default: kill_usage(stderr); }