Windows: Compute the fallback for exec_path from the program invocation.
authorJohannes Sixt <johannes.sixt@telecom.at>
Wed, 11 Apr 2007 14:02:45 +0000 (16:02 +0200)
committerJohannes 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

index 6618aad7abde8b0e74186ce7742acf0e22925479..84db7ee664e78c012221026613c141e126b64bcf 100644 (file)
@@ -8,7 +8,36 @@ static const char *argv_exec_path;
 
 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)