diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2000-09-25 17:00:24 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2000-09-25 17:00:24 (GMT) |
commit | 7198ba986d7174e9b36ec63664f340d53a5a2af3 (patch) | |
tree | 138072eb3737dbcbba3301147bf04955a4085f49 | |
parent | 38bfc4d0d543576cf71b60a9a790305c3a2c7a45 (diff) | |
download | cpython-7198ba986d7174e9b36ec63664f340d53a5a2af3.zip cpython-7198ba986d7174e9b36ec63664f340d53a5a2af3.tar.gz cpython-7198ba986d7174e9b36ec63664f340d53a5a2af3.tar.bz2 |
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)
-rw-r--r-- | Modules/getpath.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/Modules/getpath.c b/Modules/getpath.c index c295d30..7d9a961 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -219,6 +219,23 @@ joinpath(char *buffer, char *stuff) 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 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 */ - strcpy(prefix, argv0_path); + init_path_from_argv0(prefix, argv0_path); do { n = strlen(prefix); 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 */ - strcpy(exec_prefix, argv0_path); + init_path_from_argv0(exec_prefix, argv0_path); do { n = strlen(exec_prefix); joinpath(exec_prefix, lib_python); |