From e62fdd771f01ef7b50fe3cb8f456eae5d7db3748 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Thu, 19 Nov 2009 21:07:31 +0000 Subject: Make chocolate-setup use its own location in the filesystem to find the location of the chocolate-doom executable. Remove INSTALL_DIR define. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1729 --- setup/execute.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) (limited to 'setup/execute.c') diff --git a/setup/execute.c b/setup/execute.c index ae23bf2e..9672a334 100644 --- a/setup/execute.c +++ b/setup/execute.c @@ -55,7 +55,7 @@ #ifdef _WIN32 #define DOOM_BINARY PACKAGE_TARNAME ".exe" #else -#define DOOM_BINARY INSTALL_DIR "/" PACKAGE_TARNAME +#define DOOM_BINARY PACKAGE_TARNAME #endif #ifdef _WIN32 @@ -269,11 +269,41 @@ static int ExecuteCommand(const char *program, const char *arg) #else +// Given the specified program name, get the full path to the program, +// assuming that it is in the same directory as this program is. + +static char *GetFullExePath(const char *program) +{ + char *result; + char *sep; + unsigned int path_len; + + sep = strrchr(myargv[0], DIR_SEPARATOR); + + if (sep == NULL) + { + result = strdup(program); + } + else + { + path_len = sep - myargv[0] + 1; + + result = malloc(strlen(program) + path_len + 1); + + strncpy(result, myargv[0], path_len); + result[path_len] = '\0'; + + strcat(result, program); + } + + return result; +} + static int ExecuteCommand(const char *program, const char *arg) { pid_t childpid; int result; - const char *argv[] = { program, arg, NULL }; + const char *argv[3]; childpid = fork(); @@ -281,6 +311,10 @@ static int ExecuteCommand(const char *program, const char *arg) { // This is the child. Execute the command. + argv[0] = GetFullExePath(program); + argv[1] = arg; + argv[2] = NULL; + execv(argv[0], (char **) argv); exit(-1); -- cgit v1.2.3