hush: fix kill builtin without jobs support

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-01-09 05:47:57 +01:00
parent 442a414d66
commit fd68f1e80d

View File

@ -9443,7 +9443,7 @@ static struct pipe *parse_jobspec(const char *str)
return pi; return pi;
} }
} }
bb_error_msg("%d: no such job", jobnum); bb_error_msg("%u: no such job", jobnum);
return NULL; return NULL;
} }
@ -9691,9 +9691,9 @@ static int FAST_FUNC builtin_kill(char **argv)
{ {
int ret = 0; int ret = 0;
argv = skip_dash_dash(argv); # if ENABLE_HUSH_JOB
if (argv[0] && strcmp(argv[0], "-l") != 0) { if (argv[1] && strcmp(argv[1], "-l") != 0) {
int i = 0; int i = 1;
do { do {
struct pipe *pi; struct pipe *pi;
@ -9735,12 +9735,9 @@ static int FAST_FUNC builtin_kill(char **argv)
n = 1; n = 1;
dst = alloca(n * sizeof(int)*4); dst = alloca(n * sizeof(int)*4);
argv[i] = dst; argv[i] = dst;
#if ENABLE_HUSH_JOB
if (G_interactive_fd) if (G_interactive_fd)
dst += sprintf(dst, " -%u", (int)pi->pgrp); dst += sprintf(dst, " -%u", (int)pi->pgrp);
else else for (j = 0; j < n; j++) {
#endif
for (j = 0; j < n; j++) {
struct command *cmd = &pi->cmds[j]; struct command *cmd = &pi->cmds[j];
/* Skip exited members of the job */ /* Skip exited members of the job */
if (cmd->pid == 0) if (cmd->pid == 0)
@ -9755,13 +9752,12 @@ static int FAST_FUNC builtin_kill(char **argv)
*dst = '\0'; *dst = '\0';
} while (argv[++i]); } while (argv[++i]);
} }
# endif
if (argv[0] || ret == 0) { if (argv[1] || 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]! */
ret = run_applet_main(argv, kill_main); ret = run_applet_main(argv, kill_main);
} }
/* else: ret = 1, "kill %bad_jobspec" case */
return ret; return ret;
} }
#endif #endif