[Python-checkins] r84010 - in python/branches/release31-maint: Modules/getpath.c

antoine.pitrou python-checkins at python.org
Sat Aug 14 14:36:30 CEST 2010


Author: antoine.pitrou
Date: Sat Aug 14 14:36:30 2010
New Revision: 84010

Log:
Merged revisions 84008-84009 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r84008 | antoine.pitrou | 2010-08-14 14:33:18 +0200 (sam., 14 août 2010) | 3 lines
  
  Add comments about Windows in Modules/getpath.c
........
  r84009 | antoine.pitrou | 2010-08-14 14:34:41 +0200 (sam., 14 août 2010) | 2 lines
  
  Fix indentation in Modules/getpath.c
........


Modified:
   python/branches/release31-maint/   (props changed)
   python/branches/release31-maint/Modules/getpath.c

Modified: python/branches/release31-maint/Modules/getpath.c
==============================================================================
--- python/branches/release31-maint/Modules/getpath.c	(original)
+++ python/branches/release31-maint/Modules/getpath.c	Sat Aug 14 14:36:30 2010
@@ -89,6 +89,8 @@
  * directory).  This seems to make more sense given that currently the only
  * known use of sys.prefix and sys.exec_prefix is for the ILU installation
  * process to find the installed Python tree.
+ *
+ * NOTE: Windows MSVC builds use PC/getpathp.c instead!
  */
 
 #ifdef __cplusplus
@@ -134,7 +136,10 @@
 /* In principle, this should use HAVE__WSTAT, and _wstat
    should be detected by autoconf. However, no current
    POSIX system provides that function, so testing for
-   it is pointless. */
+   it is pointless.
+   Not sure whether the MS_WINDOWS guards are necessary:
+   perhaps for cygwin/mingw builds?
+*/
 #ifndef MS_WINDOWS
 static int
 _wstat(const wchar_t* path, struct stat *buf)
@@ -461,21 +466,21 @@
 #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;
-            }
+        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 there is no slash in the argv0 path, then we have to
-         * assume python is on the user's $PATH, since there's no
-         * other way to find a directory to start the search from.  If
-         * $PATH isn't exported, you lose.
-         */
-        if (wcschr(prog, SEP))
-                wcsncpy(progpath, prog, MAXPATHLEN);
+    /* 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
+     * other way to find a directory to start the search from.  If
+     * $PATH isn't exported, you lose.
+     */
+    if (wcschr(prog, SEP))
+        wcsncpy(progpath, prog, MAXPATHLEN);
 #ifdef __APPLE__
      /* On Mac OS X, if a script uses an interpreter of the form
       * "#!/opt/python2.3/bin/python", the kernel only passes "python"
@@ -487,52 +492,52 @@
       * will fail if a relative path was used. but in that case,
       * absolutize() should help us out below
       */
-        else if(0 == _NSGetExecutablePath(execpath, &nsexeclength) && execpath[0] == SEP) {
-                size_t r = mbstowcs(progpath, execpath, MAXPATHLEN+1);
-                if (r == (size_t)-1 || r > MAXPATHLEN) {
-                        /* Could not convert execpath, or it's too long. */
-                        progpath[0] = '\0';
-                }
+    else if(0 == _NSGetExecutablePath(execpath, &nsexeclength) && execpath[0] == SEP) {
+        size_t r = mbstowcs(progpath, execpath, MAXPATHLEN+1);
+        if (r == (size_t)-1 || r > MAXPATHLEN) {
+            /* Could not convert execpath, or it's too long. */
+            progpath[0] = '\0';
         }
+    }
 #endif /* __APPLE__ */
-        else if (path) {
-                while (1) {
-                        wchar_t *delim = wcschr(path, DELIM);
-
-                        if (delim) {
-                                size_t len = delim - path;
-                                if (len > MAXPATHLEN)
-                                        len = MAXPATHLEN;
-                                wcsncpy(progpath, path, len);
-                                *(progpath + len) = '\0';
-                        }
-                        else
-                                wcsncpy(progpath, path, MAXPATHLEN);
-
-                        joinpath(progpath, prog);
-                        if (isxfile(progpath))
-                                break;
-
-                        if (!delim) {
-                                progpath[0] = L'\0';
-                                break;
-                        }
-                        path = delim + 1;
-                }
+    else if (path) {
+        while (1) {
+            wchar_t *delim = wcschr(path, DELIM);
+
+            if (delim) {
+                size_t len = delim - path;
+                if (len > MAXPATHLEN)
+                    len = MAXPATHLEN;
+                wcsncpy(progpath, path, len);
+                *(progpath + len) = '\0';
+            }
+            else
+                wcsncpy(progpath, path, MAXPATHLEN);
+
+            joinpath(progpath, prog);
+            if (isxfile(progpath))
+                break;
+
+            if (!delim) {
+                progpath[0] = L'\0';
+                break;
+            }
+            path = delim + 1;
         }
-        else
-                progpath[0] = '\0';
-        if (progpath[0] != SEP && progpath[0] != '\0')
-                absolutize(progpath);
-        wcsncpy(argv0_path, progpath, MAXPATHLEN);
-        argv0_path[MAXPATHLEN] = '\0';
+    }
+    else
+        progpath[0] = '\0';
+    if (progpath[0] != SEP && progpath[0] != '\0')
+        absolutize(progpath);
+    wcsncpy(argv0_path, progpath, MAXPATHLEN);
+    argv0_path[MAXPATHLEN] = '\0';
 
 #ifdef WITH_NEXT_FRAMEWORK
-        /* On Mac OS X we have a special case if we're running from a framework.
-        ** This is because the python home should be set relative to the library,
-        ** which is in the framework, not relative to the executable, which may
-        ** be outside of the framework. Except when we're in the build directory...
-        */
+    /* On Mac OS X we have a special case if we're running from a framework.
+    ** This is because the python home should be set relative to the library,
+    ** which is in the framework, not relative to the executable, which may
+    ** be outside of the framework. Except when we're in the build directory...
+    */
     pythonModule = NSModuleForSymbol(NSLookupAndBindSymbol("_Py_Initialize"));
     /* Use dylib functions to find out where the framework was loaded from */
     buf = (wchar_t *)NSLibraryNameForModule(pythonModule);
@@ -550,13 +555,13 @@
         joinpath(argv0_path, lib_python);
         joinpath(argv0_path, LANDMARK);
         if (!ismodule(argv0_path)) {
-                /* We are in the build directory so use the name of the
-                   executable - we know that the absolute path is passed */
-                wcsncpy(argv0_path, progpath, MAXPATHLEN);
+            /* We are in the build directory so use the name of the
+               executable - we know that the absolute path is passed */
+            wcsncpy(argv0_path, progpath, MAXPATHLEN);
         }
         else {
-                /* Use the location of the library as the progpath */
-                wcsncpy(argv0_path, buf, MAXPATHLEN);
+            /* Use the location of the library as the progpath */
+            wcsncpy(argv0_path, buf, MAXPATHLEN);
         }
     }
 #endif


More information about the Python-checkins mailing list