Merge branch 'jl/maint-submodule-gitfile-awareness'
* jl/maint-submodule-gitfile-awareness: Windows: start_command: Support non-NULL dir in struct child_process
This commit is contained in:
@ -650,6 +650,7 @@ static int env_compare(const void *a, const void *b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **env,
|
static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **env,
|
||||||
|
const char *dir,
|
||||||
int prepend_cmd, int fhin, int fhout, int fherr)
|
int prepend_cmd, int fhin, int fhout, int fherr)
|
||||||
{
|
{
|
||||||
STARTUPINFO si;
|
STARTUPINFO si;
|
||||||
@ -729,7 +730,7 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **env,
|
|||||||
|
|
||||||
memset(&pi, 0, sizeof(pi));
|
memset(&pi, 0, sizeof(pi));
|
||||||
ret = CreateProcess(cmd, args.buf, NULL, NULL, TRUE, flags,
|
ret = CreateProcess(cmd, args.buf, NULL, NULL, TRUE, flags,
|
||||||
env ? envblk.buf : NULL, NULL, &si, &pi);
|
env ? envblk.buf : NULL, dir, &si, &pi);
|
||||||
|
|
||||||
if (env)
|
if (env)
|
||||||
strbuf_release(&envblk);
|
strbuf_release(&envblk);
|
||||||
@ -746,10 +747,11 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **env,
|
|||||||
static pid_t mingw_spawnve(const char *cmd, const char **argv, char **env,
|
static pid_t mingw_spawnve(const char *cmd, const char **argv, char **env,
|
||||||
int prepend_cmd)
|
int prepend_cmd)
|
||||||
{
|
{
|
||||||
return mingw_spawnve_fd(cmd, argv, env, prepend_cmd, 0, 1, 2);
|
return mingw_spawnve_fd(cmd, argv, env, NULL, prepend_cmd, 0, 1, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env,
|
pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env,
|
||||||
|
const char *dir,
|
||||||
int fhin, int fhout, int fherr)
|
int fhin, int fhout, int fherr)
|
||||||
{
|
{
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
@ -772,14 +774,14 @@ pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env,
|
|||||||
pid = -1;
|
pid = -1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pid = mingw_spawnve_fd(iprog, argv, env, 1,
|
pid = mingw_spawnve_fd(iprog, argv, env, dir, 1,
|
||||||
fhin, fhout, fherr);
|
fhin, fhout, fherr);
|
||||||
free(iprog);
|
free(iprog);
|
||||||
}
|
}
|
||||||
argv[0] = argv0;
|
argv[0] = argv0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pid = mingw_spawnve_fd(prog, argv, env, 0,
|
pid = mingw_spawnve_fd(prog, argv, env, dir, 0,
|
||||||
fhin, fhout, fherr);
|
fhin, fhout, fherr);
|
||||||
free(prog);
|
free(prog);
|
||||||
}
|
}
|
||||||
|
@ -229,6 +229,7 @@ int mingw_utime(const char *file_name, const struct utimbuf *times);
|
|||||||
#define utime mingw_utime
|
#define utime mingw_utime
|
||||||
|
|
||||||
pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env,
|
pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env,
|
||||||
|
const char *dir,
|
||||||
int fhin, int fhout, int fherr);
|
int fhin, int fhout, int fherr);
|
||||||
void mingw_execvp(const char *cmd, char *const *argv);
|
void mingw_execvp(const char *cmd, char *const *argv);
|
||||||
#define execvp mingw_execvp
|
#define execvp mingw_execvp
|
||||||
|
@ -342,8 +342,6 @@ fail_pipe:
|
|||||||
else if (cmd->out > 1)
|
else if (cmd->out > 1)
|
||||||
fhout = dup(cmd->out);
|
fhout = dup(cmd->out);
|
||||||
|
|
||||||
if (cmd->dir)
|
|
||||||
die("chdir in start_command() not implemented");
|
|
||||||
if (cmd->env)
|
if (cmd->env)
|
||||||
env = make_augmented_environ(cmd->env);
|
env = make_augmented_environ(cmd->env);
|
||||||
|
|
||||||
@ -353,7 +351,7 @@ fail_pipe:
|
|||||||
cmd->argv = prepare_shell_cmd(cmd->argv);
|
cmd->argv = prepare_shell_cmd(cmd->argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd->pid = mingw_spawnvpe(cmd->argv[0], cmd->argv, env,
|
cmd->pid = mingw_spawnvpe(cmd->argv[0], cmd->argv, env, cmd->dir,
|
||||||
fhin, fhout, fherr);
|
fhin, fhout, fherr);
|
||||||
failed_errno = errno;
|
failed_errno = errno;
|
||||||
if (cmd->pid < 0 && (!cmd->silent_exec_failure || errno != ENOENT))
|
if (cmd->pid < 0 && (!cmd->silent_exec_failure || errno != ENOENT))
|
||||||
|
Reference in New Issue
Block a user