380
switch (cerr->err) {
381
case CHILD_ERR_CHDIR:
382
error_errno("exec '%s': cd to '%s' failed",
383
- cmd->argv[0], cmd->dir);
383
+ cmd->args.v[0], cmd->dir);
384
break;
385
case CHILD_ERR_DUP2:
386
error_errno("dup2() in child failed");
392
error_errno("sigprocmask failed restoring signals");
393
break;
394
case CHILD_ERR_ENOENT:
395
- error_errno("cannot run %s", cmd->argv[0]);
395
+ error_errno("cannot run %s", cmd->args.v[0]);
396
break;
397
case CHILD_ERR_SILENT:
398
break;
399
case CHILD_ERR_ERRNO:
400
- error_errno("cannot exec '%s'", cmd->argv[0]);
400
+ error_errno("cannot exec '%s'", cmd->args.v[0]);
401
break;
402
}
403
set_error_routine(old_errfn);
405
406
static int prepare_cmd(struct strvec *out, const struct child_process *cmd)
407
{
408
- if (!cmd->argv[0])
408
+ if (!cmd->args.v[0])
409
BUG("command is empty");
410
411
/*
415
strvec_push(out, SHELL_PATH);
416
417
if (cmd->git_cmd) {
418
- prepare_git_cmd(out, cmd->argv);
418
+ prepare_git_cmd(out, cmd->args.v);
419
} else if (cmd->use_shell) {
420
- prepare_shell_cmd(out, cmd->argv);
420
+ prepare_shell_cmd(out, cmd->args.v);
421
} else {
422
- strvec_pushv(out, cmd->argv);
422
+ strvec_pushv(out, cmd->args.v);
423
}
424
425
/*
663
trace_add_env(&buf, cp->env);
664
if (cp->git_cmd)
665
strbuf_addstr(&buf, " git");
666
- sq_quote_argv_pretty(&buf, cp->argv);
666
+ sq_quote_argv_pretty(&buf, cp->args.v);
667
668
trace_printf("%s", buf.buf);
669
strbuf_release(&buf);
676
int failed_errno;
677
char *str;
678
679
- if (!cmd->argv)
680
- cmd->argv = cmd->args.v;
679
if (!cmd->env)
680
cmd->env = cmd->env_array.v;
681
727
str = "standard error";
728
fail_pipe:
729
error("cannot create %s pipe for %s: %s",
732
- str, cmd->argv[0], strerror(failed_errno));
730
+ str, cmd->args.v[0], strerror(failed_errno));
731
child_process_clear(cmd);
732
errno = failed_errno;
733
return -1;
756
failed_errno = errno;
757
cmd->pid = -1;
758
if (!cmd->silent_exec_failure)
761
- error_errno("cannot run %s", cmd->argv[0]);
759
+ error_errno("cannot run %s", cmd->args.v[0]);
760
goto end_of_spawn;
761
}
762
866
}
867
atfork_parent(&as);
868
if (cmd->pid < 0)
871
- error_errno("cannot fork() for %s", cmd->argv[0]);
869
+ error_errno("cannot fork() for %s", cmd->args.v[0]);
870
else if (cmd->clean_on_exit)
871
mark_child_for_cleanup(cmd->pid, cmd);
872
883
* At this point we know that fork() succeeded, but exec()
884
* failed. Errors have been reported to our stderr.
885
*/
888
- wait_or_whine(cmd->pid, cmd->argv[0], 0);
886
+ wait_or_whine(cmd->pid, cmd->args.v[0], 0);
887
child_err_spew(cmd, &cerr);
888
failed_errno = errno;
889
cmd->pid = -1;
900
#else
901
{
902
int fhin = 0, fhout = 1, fherr = 2;
905
- const char **sargv = cmd->argv;
903
+ const char **sargv = cmd->args.v;
904
struct strvec nargv = STRVEC_INIT;
905
906
if (cmd->no_stdin)
927
fhout = dup(cmd->out);
928
929
if (cmd->git_cmd)
932
- cmd->argv = prepare_git_cmd(&nargv, cmd->argv);
930
+ cmd->args.v = prepare_git_cmd(&nargv, sargv);
931
else if (cmd->use_shell)
934
- cmd->argv = prepare_shell_cmd(&nargv, cmd->argv);
932
+ cmd->args.v = prepare_shell_cmd(&nargv, sargv);
933
936
- cmd->pid = mingw_spawnvpe(cmd->argv[0], cmd->argv, (char**) cmd->env,
934
+ cmd->pid = mingw_spawnvpe(cmd->args.v[0], cmd->args.v, (char**) cmd->env,
935
cmd->dir, fhin, fhout, fherr);
936
failed_errno = errno;
937
if (cmd->pid < 0 && (!cmd->silent_exec_failure || errno != ENOENT))
940
- error_errno("cannot spawn %s", cmd->argv[0]);
938
+ error_errno("cannot spawn %s", cmd->args.v[0]);
939
if (cmd->clean_on_exit && cmd->pid >= 0)
940
mark_child_for_cleanup(cmd->pid, cmd);
941
942
strvec_clear(&nargv);
945
- cmd->argv = sargv;
943
+ cmd->args.v = sargv;
944
if (fhin != 0)
945
close(fhin);
946
if (fhout != 1)
990
991
int finish_command(struct child_process *cmd)
992
{
995
- int ret = wait_or_whine(cmd->pid, cmd->argv[0], 0);
993
+ int ret = wait_or_whine(cmd->pid, cmd->args.v[0], 0);
994
trace2_child_exit(cmd, ret);
995
child_process_clear(cmd);
996
invalidate_lstat_cache();
999
1000
int finish_command_in_signal(struct child_process *cmd)
1001
{
1004
- int ret = wait_or_whine(cmd->pid, cmd->argv[0], 1);
1002
+ int ret = wait_or_whine(cmd->pid, cmd->args.v[0], 1);
1003
trace2_child_exit(cmd, ret);
1004
return ret;
1005
}