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>maint
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(argv0_path);
|
||||||
assert(is_absolute_path(argv0_path));
|
assert(is_absolute_path(argv0_path));
|
||||||
|
|
||||||
if (!prefix) {
|
if (!prefix &&
|
||||||
const char *strip[] = {
|
!(prefix = strip_path_suffix(argv0_path, GIT_EXEC_PATH)) &&
|
||||||
GIT_EXEC_PATH,
|
!(prefix = strip_path_suffix(argv0_path, BINDIR)) &&
|
||||||
BINDIR,
|
!(prefix = strip_path_suffix(argv0_path, "git"))) {
|
||||||
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) {
|
|
||||||
prefix = PREFIX;
|
prefix = PREFIX;
|
||||||
fprintf(stderr, "RUNTIME_PREFIX requested, "
|
fprintf(stderr, "RUNTIME_PREFIX requested, "
|
||||||
"but prefix computation failed. "
|
"but prefix computation failed. "
|
||||||
|
|
Loading…
Reference in New Issue