Signed-off-by: Scott R Parish <srp@xxxxxxxxxxxx> --- exec_cmd.c | 26 ++++++++++++++++++++++---- 1 files changed, 22 insertions(+), 4 deletions(-) diff --git a/exec_cmd.c b/exec_cmd.c index 9b74ed2..674c9f3 100644 --- a/exec_cmd.c +++ b/exec_cmd.c @@ -34,15 +34,15 @@ int execv_git_cmd(const char **argv) { char git_command[PATH_MAX + 1]; int i; + int rc; const char *paths[] = { current_exec_path, getenv(EXEC_PATH_ENVIRONMENT), builtin_exec_path }; + const char *tmp; + size_t len; for (i = 0; i < ARRAY_SIZE(paths); ++i) { - size_t len; - int rc; const char *exec_dir = paths[i]; - const char *tmp; if (!exec_dir || !*exec_dir) continue; @@ -106,8 +106,26 @@ int execv_git_cmd(const char **argv) argv[0] = tmp; } - return -1; + rc = snprintf(git_command, sizeof(git_command), "git-%s", argv[0]); + if (rc < 0 || rc >= sizeof(git_command) - len) { + fprintf(stderr, "git: command name given is too long.\n"); + return -1; + } + + tmp = argv[0]; + argv[0] = git_command; + + trace_argv_printf(argv, -1, "trace: exec:"); + + /* execve() can only ever return if it fails */ + execvp(git_command, (char **)argv); + + trace_printf("trace: exec failed: %s\n", strerror(errno)); + + argv[0] = tmp; + + return -1; } -- 1.5.3.GIT - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html