fix bug #114290: when interpreter's argv[0] has a relative path make

it absolute by joining it with getcwd result.  avoid including
    unnecessary ./ in path but do not test for ../ (more complicated)
This commit is contained in:
Jeremy Hylton 2000-09-25 17:00:24 +00:00
parent 38bfc4d0d5
commit 7198ba986d
1 changed files with 19 additions and 2 deletions

View File

@ -219,6 +219,23 @@ joinpath(char *buffer, char *stuff)
buffer[n+k] = '\0'; buffer[n+k] = '\0';
} }
static void
init_path_from_argv0(char *path, char *argv0_path)
{
if (argv0_path[0] == '/')
strcpy(path, argv0_path);
else if (argv0_path[0] == '.') {
getcwd(path, MAXPATHLEN);
if (argv0_path[1] == '/')
joinpath(path, argv0_path + 2);
else
joinpath(path, argv0_path);
}
else {
getcwd(path, MAXPATHLEN);
joinpath(path, argv0_path);
}
}
static int static int
search_for_prefix(char *argv0_path, char *home) search_for_prefix(char *argv0_path, char *home)
@ -264,7 +281,7 @@ search_for_prefix(char *argv0_path, char *home)
} }
/* Search from argv0_path, until root is found */ /* Search from argv0_path, until root is found */
strcpy(prefix, argv0_path); init_path_from_argv0(prefix, argv0_path);
do { do {
n = strlen(prefix); n = strlen(prefix);
joinpath(prefix, lib_python); joinpath(prefix, lib_python);
@ -314,7 +331,7 @@ search_for_exec_prefix(char *argv0_path, char *home)
} }
/* Search from argv0_path, until root is found */ /* Search from argv0_path, until root is found */
strcpy(exec_prefix, argv0_path); init_path_from_argv0(exec_prefix, argv0_path);
do { do {
n = strlen(exec_prefix); n = strlen(exec_prefix);
joinpath(exec_prefix, lib_python); joinpath(exec_prefix, lib_python);