]> granicus.if.org Git - python/commitdiff
calculate_path(): use _Py_char2wchar() to decode the PATH environment variable,
authorVictor Stinner <victor.stinner@haypocalc.com>
Sat, 16 Oct 2010 23:34:22 +0000 (23:34 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Sat, 16 Oct 2010 23:34:22 +0000 (23:34 +0000)
to support surrogate characters

Modules/getpath.c

index 2275c8473848257b3eecc2641197ef56d97680d8..776c4645f59eb0bb1c3eba82a820ffa1fad0149e 100644 (file)
@@ -407,7 +407,6 @@ calculate_path(void)
     wchar_t rtpypath[MAXPATHLEN+1];
     wchar_t *home = Py_GetPythonHome();
     char *_path = getenv("PATH");
-    wchar_t wpath[MAXPATHLEN+1];
     wchar_t *path = NULL;
     wchar_t *prog = Py_GetProgramName();
     wchar_t argv0_path[MAXPATHLEN+1];
@@ -429,14 +428,8 @@ calculate_path(void)
         char execpath[MAXPATHLEN+1];
 #endif
 
-    if (_path) {
-        size_t r = mbstowcs(wpath, _path, MAXPATHLEN+1);
-        path = wpath;
-        if (r == (size_t)-1 || r > MAXPATHLEN) {
-            /* Could not convert PATH, or it's too long. */
-            path = NULL;
-        }
-    }
+    if (_path)
+        path = _Py_char2wchar(_path, NULL);
 
     /* If there is no slash in the argv0 path, then we have to
      * assume python is on the user's $PATH, since there's no
@@ -491,6 +484,8 @@ calculate_path(void)
     }
     else
         progpath[0] = '\0';
+    if (path != NULL)
+        PyMem_Free(path);
     if (progpath[0] != SEP && progpath[0] != '\0')
         absolutize(progpath);
     wcsncpy(argv0_path, progpath, MAXPATHLEN);