diff options
author | Eugene Tarassov | 2012-08-13 20:04:53 +0000 |
---|---|---|
committer | Eugene Tarassov | 2012-08-13 20:04:53 +0000 |
commit | dfe1cbf067f189c62cdc347e7b13dcfe50f5ee74 (patch) | |
tree | 180d3075a71f606be4ac9e49c54d797093ef6a59 /agent | |
parent | bb914b26e4a21e74891173ec42832a528e9ca784 (diff) | |
download | org.eclipse.tcf.agent-dfe1cbf067f189c62cdc347e7b13dcfe50f5ee74.tar.gz org.eclipse.tcf.agent-dfe1cbf067f189c62cdc347e7b13dcfe50f5ee74.tar.xz org.eclipse.tcf.agent-dfe1cbf067f189c62cdc347e7b13dcfe50f5ee74.zip |
Bug 387079 - Cannot launch an executable by specifying relative path
Diffstat (limited to 'agent')
-rw-r--r-- | agent/tcf/services/processes.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/agent/tcf/services/processes.c b/agent/tcf/services/processes.c index 10d81320..18bd08b2 100644 --- a/agent/tcf/services/processes.c +++ b/agent/tcf/services/processes.c @@ -1015,6 +1015,7 @@ static int start_process_imp(Channel * c, char ** envp, const char * dir, const const char * fnm = exe; char * cmd = NULL; char * env = NULL; + char * env_path = NULL; SetHandleInformation(hpipes[0][0], HANDLE_FLAG_INHERIT, TRUE); SetHandleInformation(hpipes[1][1], HANDLE_FLAG_INHERIT, TRUE); SetHandleInformation(hpipes[2][1], HANDLE_FLAG_INHERIT, TRUE); @@ -1054,10 +1055,14 @@ static int start_process_imp(Channel * c, char ** envp, const char * dir, const char ** p = envp; size_t env_size = 1; char * s = NULL; + char * path = getenv("PATH"); + if (path == NULL) env_path = "PATH="; + else env_path = tmp_strdup2("PATH=", path); while (*p != NULL) env_size += strlen(*p++) + 1; s = env = (char *)tmp_alloc(env_size); for (p = envp; *p != NULL; p++) { size_t l = strlen(*p) + 1; + if (strncmp(*p, "PATH=", 5) == 0) putenv(*p); memcpy(s, *p, l); s += l; } @@ -1077,6 +1082,7 @@ static int start_process_imp(Channel * c, char ** envp, const char * dir, const if (!CloseHandle(prs_info.hThread)) err = set_win32_errno(GetLastError()); if (!CloseHandle(prs_info.hProcess)) err = set_win32_errno(GetLastError()); } + if (env_path != NULL) putenv(env_path); } if (close(fpipes[0][0]) < 0 && !err) err = errno; if (close(fpipes[1][1]) < 0 && !err) err = errno; @@ -1249,7 +1255,8 @@ static int start_process_imp(Channel * c, char ** envp, const char * dir, const if (!err && params->attach && context_attach_self() < 0) err = errno; if (!err && params->dir != NULL && chdir(params->dir) < 0) err = errno; if (!err) { - execve(exe, args, envp); + environ = envp; + execvp(exe, args); err = errno; } if (write(p_log[1], &err, sizeof(err)) != sizeof(err)) exit(2); @@ -1315,7 +1322,8 @@ static int start_process_imp(Channel * c, char ** envp, const char * dir, const if (!err && params->attach && context_attach_self() < 0) err = errno; if (!err && params->dir != NULL && chdir(params->dir) < 0) err = errno; if (!err) { - execve(exe, args, envp); + environ = envp; + execvp(exe, args); err = errno; } if (write(p_log[1], &err, sizeof(err)) != sizeof(err)) exit(2); |