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>
This commit is contained in:
parent
4fcc86b07d
commit
024aa7d8d5
33
exec_cmd.c
33
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. "
|
||||
|
Loading…
Reference in New Issue
Block a user