summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Johannes Schindelin <johannes.schindelin@gmx.de>2009-02-19 20:10:53 +0100
committerLibravatar Junio C Hamano <gitster@pobox.com>2009-02-19 22:47:39 -0800
commit024aa7d8d5114f76e616a0ed8ddcf3b463ff2c14 (patch)
tree5be882a523e0185a8114e44689469d85ffa3eca9
parentIntroduce the function strip_path_suffix() (diff)
downloadtgif-024aa7d8d5114f76e616a0ed8ddcf3b463ff2c14.tar.xz
system_path(): simplify using strip_path_suffix(), and add suffix "git"
At least for the author of this patch, the logic in system_path() was too hard to understand. Using the function strip_path_suffix() documents the idea of the code better. The real change is to add the suffix "git", so that a runtime prefix will be computed correctly even when the executable was called in /git/ as is the case in msysGit (Windows insists to search the current directory before the PATH when looking for an executable). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Acked-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--exec_cmd.c33
1 files changed, 4 insertions, 29 deletions
diff --git a/exec_cmd.c b/exec_cmd.c
index f234066def..217c12577f 100644
--- a/exec_cmd.c
+++ b/exec_cmd.c
@@ -23,35 +23,10 @@ const char *system_path(const char *path)
assert(argv0_path);
assert(is_absolute_path(argv0_path));
- if (!prefix) {
- const char *strip[] = {
- GIT_EXEC_PATH,
- BINDIR,
- 0
- };
- const char **s;
-
- for (s = strip; *s; s++) {
- const char *sargv = argv0_path + strlen(argv0_path);
- const char *ss = *s + strlen(*s);
- while (argv0_path < sargv && *s < ss
- && (*sargv == *ss ||
- (is_dir_sep(*sargv) && is_dir_sep(*ss)))) {
- sargv--;
- ss--;
- }
- if (*s == ss) {
- struct strbuf d = STRBUF_INIT;
- /* We also skip the trailing directory separator. */
- assert(sargv - argv0_path - 1 >= 0);
- strbuf_add(&d, argv0_path, sargv - argv0_path - 1);
- prefix = strbuf_detach(&d, NULL);
- break;
- }
- }
- }
-
- if (!prefix) {
+ if (!prefix &&
+ !(prefix = strip_path_suffix(argv0_path, GIT_EXEC_PATH)) &&
+ !(prefix = strip_path_suffix(argv0_path, BINDIR)) &&
+ !(prefix = strip_path_suffix(argv0_path, "git"))) {
prefix = PREFIX;
fprintf(stderr, "RUNTIME_PREFIX requested, "
"but prefix computation failed. "