Windows: Compute the fallback for exec_path from the program invocation.
Since on Windows the user is fairly free where to install programs, we cannot rely on a hard-coded path. We use the program name to derive the installation directory and use that as exec_path. Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>maint
parent
4ec22a48c0
commit
6fad004a37
29
exec_cmd.c
29
exec_cmd.c
|
@ -8,7 +8,36 @@ static const char *argv_exec_path;
|
||||||
|
|
||||||
static const char *builtin_exec_path(void)
|
static const char *builtin_exec_path(void)
|
||||||
{
|
{
|
||||||
|
#ifndef __MINGW32__
|
||||||
return GIT_EXEC_PATH;
|
return GIT_EXEC_PATH;
|
||||||
|
#else
|
||||||
|
int len;
|
||||||
|
char *p, *q, *sl;
|
||||||
|
static char *ep;
|
||||||
|
if (ep)
|
||||||
|
return ep;
|
||||||
|
|
||||||
|
len = strlen(_pgmptr);
|
||||||
|
if (len < 2)
|
||||||
|
return ep = ".";
|
||||||
|
|
||||||
|
p = ep = xmalloc(len+1);
|
||||||
|
q = _pgmptr;
|
||||||
|
sl = NULL;
|
||||||
|
/* copy program name, turn '\\' into '/', skip last part */
|
||||||
|
while ((*p = *q)) {
|
||||||
|
if (*q == '\\' || *q == '/') {
|
||||||
|
*p = '/';
|
||||||
|
sl = p;
|
||||||
|
}
|
||||||
|
p++, q++;
|
||||||
|
}
|
||||||
|
if (sl)
|
||||||
|
*sl = '\0';
|
||||||
|
else
|
||||||
|
ep[0] = '.', ep[1] = '\0';
|
||||||
|
return ep;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void git_set_argv_exec_path(const char *exec_path)
|
void git_set_argv_exec_path(const char *exec_path)
|
||||||
|
|
Loading…
Reference in New Issue