From: Junio C Hamano Date: Thu, 10 Mar 2016 19:13:47 +0000 (-0800) Subject: Merge branch 'ak/extract-argv0-last-dir-sep' into maint X-Git-Tag: v2.7.3~5 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/c6f399c96f5a323a11f63a54553664c596bf0e2d?ds=inline;hp=-c Merge branch 'ak/extract-argv0-last-dir-sep' into maint Code simplification. * ak/extract-argv0-last-dir-sep: exec_cmd.c: use find_last_dir_sep() for code simplification --- c6f399c96f5a323a11f63a54553664c596bf0e2d diff --combined exec_cmd.c index cf442a97f8,680b257cd5..9d5703a157 --- a/exec_cmd.c +++ b/exec_cmd.c @@@ -1,7 -1,6 +1,7 @@@ #include "cache.h" #include "exec_cmd.h" #include "quote.h" +#include "argv-array.h" #define MAX_ARGS 32 static const char *argv_exec_path; @@@ -44,12 -43,10 +44,10 @@@ const char *git_extract_argv0_path(cons if (!argv0 || !*argv0) return NULL; - slash = argv0 + strlen(argv0); - while (argv0 <= slash && !is_dir_sep(*slash)) - slash--; + slash = find_last_dir_sep(argv0); - if (slash >= argv0) { + if (slash) { argv0_path = xstrndup(argv0, slash - argv0); return slash + 1; } @@@ -108,25 -105,32 +106,25 @@@ void setup_path(void strbuf_release(&new_path); } -const char **prepare_git_cmd(const char **argv) +const char **prepare_git_cmd(struct argv_array *out, const char **argv) { - int argc; - const char **nargv; - - for (argc = 0; argv[argc]; argc++) - ; /* just counting */ - nargv = xmalloc(sizeof(*nargv) * (argc + 2)); - - nargv[0] = "git"; - for (argc = 0; argv[argc]; argc++) - nargv[argc + 1] = argv[argc]; - nargv[argc + 1] = NULL; - return nargv; + argv_array_push(out, "git"); + argv_array_pushv(out, argv); + return out->argv; } int execv_git_cmd(const char **argv) { - const char **nargv = prepare_git_cmd(argv); - trace_argv_printf(nargv, "trace: exec:"); + struct argv_array nargv = ARGV_ARRAY_INIT; + + prepare_git_cmd(&nargv, argv); + trace_argv_printf(nargv.argv, "trace: exec:"); /* execvp() can only ever return if it fails */ - sane_execvp("git", (char **)nargv); + sane_execvp("git", (char **)nargv.argv); trace_printf("trace: exec failed: %s\n", strerror(errno)); - free(nargv); + argv_array_clear(&nargv); return -1; }