replace and remove run_command_v_opt()
Replace the remaining calls of run_command_v_opt() with run_command() calls and explict struct child_process variables. This is more verbose, but not by much overall. The code becomes more flexible, e.g. it's easy to extend to conditionally add a new argument. Then remove the now unused function and its own flag names, simplifying the run-command API. Suggested-by: Jeff King <peff@peff.net> Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Taylor Blau <me@ttaylorr.com>
This commit is contained in:

committed by
Taylor Blau

parent
ef249b398e
commit
ddbb47fde9
17
shell.c
17
shell.c
@ -52,21 +52,24 @@ static void cd_to_homedir(void)
|
||||
static void run_shell(void)
|
||||
{
|
||||
int done = 0;
|
||||
static const char *help_argv[] = { HELP_COMMAND, NULL };
|
||||
struct child_process help_cmd = CHILD_PROCESS_INIT;
|
||||
|
||||
if (!access(NOLOGIN_COMMAND, F_OK)) {
|
||||
/* Interactive login disabled. */
|
||||
const char *argv[] = { NOLOGIN_COMMAND, NULL };
|
||||
struct child_process nologin_cmd = CHILD_PROCESS_INIT;
|
||||
int status;
|
||||
|
||||
status = run_command_v_opt(argv, 0);
|
||||
strvec_push(&nologin_cmd.args, NOLOGIN_COMMAND);
|
||||
status = run_command(&nologin_cmd);
|
||||
if (status < 0)
|
||||
exit(127);
|
||||
exit(status);
|
||||
}
|
||||
|
||||
/* Print help if enabled */
|
||||
run_command_v_opt(help_argv, RUN_SILENT_EXEC_FAILURE);
|
||||
help_cmd.silent_exec_failure = 1;
|
||||
strvec_push(&help_cmd.args, HELP_COMMAND);
|
||||
run_command(&help_cmd);
|
||||
|
||||
do {
|
||||
const char *prog;
|
||||
@ -125,9 +128,13 @@ static void run_shell(void)
|
||||
!strcmp(prog, "exit") || !strcmp(prog, "bye")) {
|
||||
done = 1;
|
||||
} else if (is_valid_cmd_name(prog)) {
|
||||
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||
|
||||
full_cmd = make_cmd(prog);
|
||||
argv[0] = full_cmd;
|
||||
code = run_command_v_opt(argv, RUN_SILENT_EXEC_FAILURE);
|
||||
cmd.silent_exec_failure = 1;
|
||||
strvec_pushv(&cmd.args, argv);
|
||||
code = run_command(&cmd);
|
||||
if (code == -1 && errno == ENOENT) {
|
||||
fprintf(stderr, "unrecognized command '%s'\n", prog);
|
||||
}
|
||||
|
Reference in New Issue
Block a user