summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--PC/os2emx/getpathp.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/PC/os2emx/getpathp.c b/PC/os2emx/getpathp.c
index 5cb8278..ab31c65 100644
--- a/PC/os2emx/getpathp.c
+++ b/PC/os2emx/getpathp.c
@@ -250,6 +250,8 @@ calculate_path(void)
size_t bufsz;
char *pythonhome = Py_GetPythonHome();
char *envpath = getenv("PYTHONPATH");
+ char zip_path[MAXPATHLEN+1];
+ size_t len;
get_progpath();
/* progpath guaranteed \0 terminated in MAXPATH+1 bytes. */
@@ -267,12 +269,26 @@ calculate_path(void)
if (envpath && *envpath == '\0')
envpath = NULL;
+ /* Calculate zip archive path */
+ strncpy(zip_path, progpath, MAXPATHLEN);
+ zip_path[MAXPATHLEN] = '\0';
+ len = strlen(zip_path);
+ if (len > 4) {
+ zip_path[len-3] = 'z'; /* change ending to "zip" */
+ zip_path[len-2] = 'i';
+ zip_path[len-1] = 'p';
+ }
+ else {
+ zip_path[0] = 0;
+ }
+
/* We need to construct a path from the following parts.
(1) the PYTHONPATH environment variable, if set;
- (2) the PYTHONPATH config macro, with the leading "."
+ (2) the zip archive file path;
+ (3) the PYTHONPATH config macro, with the leading "."
of each component replaced with pythonhome, if set;
- (3) the directory containing the executable (argv0_path).
- The length calculation calculates #2 first.
+ (4) the directory containing the executable (argv0_path).
+ The length calculation calculates #3 first.
*/
/* Calculate size of return buffer */
@@ -289,6 +305,7 @@ calculate_path(void)
bufsz = 0;
bufsz += strlen(PYTHONPATH) + 1;
bufsz += strlen(argv0_path) + 1;
+ bufsz += strlen(zip_path) + 1;
if (envpath != NULL)
bufsz += strlen(envpath) + 1;
@@ -312,6 +329,11 @@ calculate_path(void)
buf = strchr(buf, '\0');
*buf++ = DELIM;
}
+ if (zip_path[0]) {
+ strcpy(buf, zip_path);
+ buf = strchr(buf, '\0');
+ *buf++ = DELIM;
+ }
if (pythonhome == NULL) {
strcpy(buf, PYTHONPATH);