Merge branch 'j6t/mingw'
* j6t/mingw: (38 commits) compat/pread.c: Add a forward declaration to fix a warning Windows: Fix ntohl() related warnings about printf formatting Windows: TMP and TEMP environment variables specify a temporary directory. Windows: Make 'git help -a' work. Windows: Work around an oddity when a pipe with no reader is written to. Windows: Make the pager work. When installing, be prepared that template_dir may be relative. Windows: Use a relative default template_dir and ETC_GITCONFIG Windows: Compute the fallback for exec_path from the program invocation. Turn builtin_exec_path into a function. Windows: Use a customized struct stat that also has the st_blocks member. Windows: Add a custom implementation for utime(). Windows: Add a new lstat and fstat implementation based on Win32 API. Windows: Implement a custom spawnve(). Windows: Implement wrappers for gethostbyname(), socket(), and connect(). Windows: Work around incompatible sort and find. Windows: Implement asynchronous functions as threads. Windows: Disambiguate DOS style paths from SSH URLs. Windows: A rudimentary poll() emulation. Windows: Implement start_command(). ...
This commit is contained in:
41
exec_cmd.c
41
exec_cmd.c
@ -4,9 +4,42 @@
|
||||
#define MAX_ARGS 32
|
||||
|
||||
extern char **environ;
|
||||
static const char *builtin_exec_path = GIT_EXEC_PATH;
|
||||
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)
|
||||
{
|
||||
argv_exec_path = exec_path;
|
||||
@ -26,7 +59,7 @@ const char *git_exec_path(void)
|
||||
return env;
|
||||
}
|
||||
|
||||
return builtin_exec_path;
|
||||
return builtin_exec_path();
|
||||
}
|
||||
|
||||
static void add_path(struct strbuf *out, const char *path)
|
||||
@ -37,7 +70,7 @@ static void add_path(struct strbuf *out, const char *path)
|
||||
else
|
||||
strbuf_addstr(out, make_absolute_path(path));
|
||||
|
||||
strbuf_addch(out, ':');
|
||||
strbuf_addch(out, PATH_SEP);
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,7 +83,7 @@ void setup_path(const char *cmd_path)
|
||||
|
||||
add_path(&new_path, argv_exec_path);
|
||||
add_path(&new_path, getenv(EXEC_PATH_ENVIRONMENT));
|
||||
add_path(&new_path, builtin_exec_path);
|
||||
add_path(&new_path, builtin_exec_path());
|
||||
add_path(&new_path, cmd_path);
|
||||
|
||||
if (old_path)
|
||||
|
||||
Reference in New Issue
Block a user