diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-07-01 15:21:52 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-07-01 15:21:52 -0700 |
commit | 9d54ea6760cc4d7ee526d12cd00218bf19b79bf5 (patch) | |
tree | b783aca8a1e4440b022ac19f163678170a3565c7 /exec_cmd.c | |
parent | Merge branch 'nd/dashless' (diff) | |
parent | Prepare execv_git_cmd() for removal of builtins from the filesystem (diff) | |
download | tgif-9d54ea6760cc4d7ee526d12cd00218bf19b79bf5.tar.xz |
Merge branch 'jc/dashless' (early part)
* 'jc/dashless' (early part):
Prepare execv_git_cmd() for removal of builtins from the filesystem
git-shell: accept "git foo" form
Diffstat (limited to 'exec_cmd.c')
-rw-r--r-- | exec_cmd.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/exec_cmd.c b/exec_cmd.c index e189caca62..0f8f4b5b7d 100644 --- a/exec_cmd.c +++ b/exec_cmd.c @@ -65,32 +65,25 @@ void setup_path(const char *cmd_path) int execv_git_cmd(const char **argv) { - struct strbuf cmd; - const char *tmp; - - strbuf_init(&cmd, 0); - strbuf_addf(&cmd, "git-%s", argv[0]); + int argc; + const char **nargv; - /* - * argv[0] must be the git command, but the argv array - * belongs to the caller, and may be reused in - * subsequent loop iterations. Save argv[0] and - * restore it on error. - */ - tmp = argv[0]; - argv[0] = cmd.buf; + for (argc = 0; argv[argc]; argc++) + ; /* just counting */ + nargv = xmalloc(sizeof(*nargv) * (argc + 2)); - trace_argv_printf(argv, "trace: exec:"); + nargv[0] = "git"; + for (argc = 0; argv[argc]; argc++) + nargv[argc + 1] = argv[argc]; + nargv[argc + 1] = NULL; + trace_argv_printf(nargv, "trace: exec:"); /* execvp() can only ever return if it fails */ - execvp(cmd.buf, (char **)argv); + execvp("git", (char **)nargv); trace_printf("trace: exec failed: %s\n", strerror(errno)); - argv[0] = tmp; - - strbuf_release(&cmd); - + free(nargv); return -1; } |