summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4ec22a4)
raw | patch | inline | side by side (parent: 4ec22a4)
author | Johannes Sixt <johannes.sixt@telecom.at> | |
Wed, 11 Apr 2007 14:02:45 +0000 (16:02 +0200) | ||
committer | Johannes Sixt <johannes.sixt@telecom.at> | |
Thu, 26 Jun 2008 06:45:12 +0000 (08:45 +0200) |
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>
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>
exec_cmd.c | patch | blob | history |
diff --git a/exec_cmd.c b/exec_cmd.c
index 6618aad7abde8b0e74186ce7742acf0e22925479..84db7ee664e78c012221026613c141e126b64bcf 100644 (file)
--- a/exec_cmd.c
+++ b/exec_cmd.c
static const char *builtin_exec_path(void)
{
+#ifndef __MINGW32__
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)