Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Windows: Compute the fallback for exec_path from the program invocation.
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>
exec_cmd.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
4ec22a4
)
diff --git
a/exec_cmd.c
b/exec_cmd.c
index 6618aad7abde8b0e74186ce7742acf0e22925479..84db7ee664e78c012221026613c141e126b64bcf 100644
(file)
--- a/
exec_cmd.c
+++ b/
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)