From a1f8166642ef6a5fbb1f3e3846fdf3ab52c15c1d Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Feb 2012 20:02:54 +0100 Subject: [PATCH] pgrep: allow signal definition to be anywhere in command line 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 --- pgrep.c | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/pgrep.c b/pgrep.c index a5707985..47e3b499 100644 --- 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 {