summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2000-09-25 17:00:24 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2000-09-25 17:00:24 (GMT)
commit7198ba986d7174e9b36ec63664f340d53a5a2af3 (patch)
tree138072eb3737dbcbba3301147bf04955a4085f49
parent38bfc4d0d543576cf71b60a9a790305c3a2c7a45 (diff)
downloadcpython-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.c21
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);