diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-01-09 05:47:57 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-01-09 05:47:57 +0100 |
commit | fd68f1e80dbed81e42a0298db5fcf578e8d944a9 (patch) | |
tree | 80a7416398a5eecb03563cea1fed0bc747a31b64 /shell | |
parent | 442a414d66266336e09eae2ea6713b5bf054475e (diff) |
hush: fix kill builtin without jobs support
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r-- | shell/hush.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/shell/hush.c b/shell/hush.c index 01c334a46..247ad7aab 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -9443,7 +9443,7 @@ static struct pipe *parse_jobspec(const char *str) return pi; } } - bb_error_msg("%d: no such job", jobnum); + bb_error_msg("%u: no such job", jobnum); return NULL; } @@ -9691,9 +9691,9 @@ static int FAST_FUNC builtin_kill(char **argv) { int ret = 0; - argv = skip_dash_dash(argv); - if (argv[0] && strcmp(argv[0], "-l") != 0) { - int i = 0; +# if ENABLE_HUSH_JOB + if (argv[1] && strcmp(argv[1], "-l") != 0) { + int i = 1; do { struct pipe *pi; @@ -9735,12 +9735,9 @@ static int FAST_FUNC builtin_kill(char **argv) n = 1; dst = alloca(n * sizeof(int)*4); argv[i] = dst; -#if ENABLE_HUSH_JOB if (G_interactive_fd) dst += sprintf(dst, " -%u", (int)pi->pgrp); - else -#endif - for (j = 0; j < n; j++) { + else for (j = 0; j < n; j++) { struct command *cmd = &pi->cmds[j]; /* Skip exited members of the job */ if (cmd->pid == 0) @@ -9755,13 +9752,12 @@ static int FAST_FUNC builtin_kill(char **argv) *dst = '\0'; } while (argv[++i]); } +# endif - if (argv[0] || ret == 0) { - argv--; - argv[0] = (char*)"kill"; /* why? think about "kill -- PID" */ - /* kill_main also handles "killall" etc, so it does look at argv[0]! */ + if (argv[1] || ret == 0) { ret = run_applet_main(argv, kill_main); } + /* else: ret = 1, "kill %bad_jobspec" case */ return ret; } #endif |