Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/agent
diff options
context:
space:
mode:
authorEugene Tarassov2012-08-13 20:04:53 +0000
committerEugene Tarassov2012-08-13 20:04:53 +0000
commitdfe1cbf067f189c62cdc347e7b13dcfe50f5ee74 (patch)
tree180d3075a71f606be4ac9e49c54d797093ef6a59 /agent
parentbb914b26e4a21e74891173ec42832a528e9ca784 (diff)
downloadorg.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.c12
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);

Back to the top