]> granicus.if.org Git - procps-ng/commitdiff
pgrep: allow signal definition to be anywhere in command line
authorSami Kerola <kerolasa@iki.fi>
Sat, 11 Feb 2012 19:02:54 +0000 (20:02 +0100)
committerSami Kerola <kerolasa@iki.fi>
Sat, 11 Feb 2012 20:42:42 +0000 (21:42 +0100)
I as user often try to pkill something, notice that program did not
die and pkill again with signal -9.  Before this commit previous one
could not add signal at the end of command line, as the signal
definition had to be first argument, which was annoying.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
pgrep.c

diff --git a/pgrep.c b/pgrep.c
index a5707985d4a7e281b1c2089145fa4a37d064e543..47e3b4993a3df07b504b4979849c0e414771542d 100644 (file)
--- a/pgrep.c
+++ b/pgrep.c
@@ -553,6 +553,24 @@ static struct el * select_procs (int *num)
        return list;
 }
 
+int signal_option(int *argc, char **argv)
+{
+       int sig;
+       int i = 1;
+       while (i < *argc) {
+               sig = signal_name_to_number(argv[i] + 1);
+               if (sig == -1 && isdigit(argv[1][1]))
+                       sig = atoi(argv[1] + 1);
+               if (-1 < sig) {
+                       memmove(argv + i, argv + i + 1,
+                               sizeof(char *) * (*argc - i));
+                       (*argc)--;
+                       return sig;
+               }
+               i++;
+       }
+       return -1;
+}
 
 static void parse_opts (int argc, char **argv)
 {
@@ -589,21 +607,11 @@ static void parse_opts (int argc, char **argv)
        };
 
        if (strstr (program_invocation_short_name, "pkill")) {
-               i_am_pkill = 1;
-               /* Look for a signal name or number as first argument */
-               if (argc > 1 && argv[1][0] == '-') {
-                       int sig;
-                       sig = signal_name_to_number (argv[1] + 1);
-                       if (sig == -1 && isdigit (argv[1][1]))
-                               sig = atoi (argv[1] + 1);
-                       if (sig != -1) {
-                               int i;
-                               for (i = 2; i < argc; i++)
-                                       argv[i-1] = argv[i];
-                               --argc;
-                               opt_signal = sig;
-                       }
-               }
+               int sig;
+               i_am_pkill = 1;
+               sig = signal_option(&argc, argv);
+               if (-1 < sig)
+                       opt_signal = sig;
                /* These options are for pkill only */
                strcat (opts, "e");
        } else {