Merge branch 'ak/extract-argv0-last-dir-sep' into maint
authorJunio C Hamano <gitster@pobox.com>
Thu, 10 Mar 2016 19:13:47 +0000 (11:13 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 10 Mar 2016 19:13:47 +0000 (11:13 -0800)
Code simplification.

* ak/extract-argv0-last-dir-sep:
exec_cmd.c: use find_last_dir_sep() for code simplification

1  2 
exec_cmd.c
diff --combined exec_cmd.c
index cf442a97f86aea7accc673d3fe55b9b7494dbf78,680b257cd5ae99175dc52e85a2aa4ba570c7f35b..9d5703a157fe8e9d8396e0771798e54dc5eea6eb
@@@ -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;
  }