summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Small <csmall@enc.com.au>2012-10-02 21:56:38 +1000
committerCraig Small <csmall@enc.com.au>2012-10-02 21:56:38 +1000
commit19b6f48990b02aeca211b480625b95b2033c1017 (patch)
treecffb6a345bf5bd1f699344b6892dfb648eb16003
parentd58dc6b1e715fb1df22ed67bbeab639f9e5454fb (diff)
downloadprocps-ng-19b6f48990b02aeca211b480625b95b2033c1017.tar.gz
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 <csmall@enc.com.au>
-rw-r--r--skill.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/skill.c b/skill.c
index 94bf9c9..a1f89e0 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);
}