[Python-checkins] cpython (2.7): Extracted Windows directory detection from NullImporter.__init__. This greatly

jason.coombs python-checkins at python.org
Thu Mar 8 15:40:42 CET 2012


http://hg.python.org/cpython/rev/6c218b9c5c4c
changeset:   75491:6c218b9c5c4c
branch:      2.7
user:        Jason R. Coombs <jaraco at jaraco.com>
date:        Fri Jan 13 17:37:18 2012 -0500
summary:
  Extracted Windows directory detection from NullImporter.__init__. This greatly simplifies the code and fixes issue6727.

files:
  Python/import.c |  71 ++++++++++++------------------------
  1 files changed, 24 insertions(+), 47 deletions(-)


diff --git a/Python/import.c b/Python/import.c
--- a/Python/import.c
+++ b/Python/import.c
@@ -114,19 +114,34 @@
 };
 #endif
 
-#ifdef HAVE_STAT
+#ifdef MS_WINDOWS
+int isdir(char *path) {
+	DWORD rv;
+	/* see issue1293 and issue3677:
+	 * stat() on Windows doesn't recognise paths like
+	 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
+	 * Also reference issue6727:
+	 * stat() on Windows is broken and doesn't resolve symlinks properly.
+	 */
+	rv = GetFileAttributesA(path);
+	return rv != INVALID_FILE_ATTRIBUTES && rv & FILE_ATTRIBUTE_DIRECTORY;
+}
+#else
+#if HAVE_STAT
 int isdir(char *path) {
     struct stat statbuf;
 	return stat(path, &statbuf) == 0 && S_ISDIR(statbuf.st_mode);
 }
 #else
+#ifdef RISCOS
 /* with RISCOS, isdir is in unixstuff */
-#ifndef RISCOS
+#else
 int isdir(char *path) {
 	return 0;
 }
-#endif
-#endif
+#endif /* RISCOS */
+#endif /* HAVE_STAT */
+#endif /* MS_WINDOWS */
 
 /* Initialize things */
 
@@ -3185,49 +3200,11 @@
         PyErr_SetString(PyExc_ImportError, "empty pathname");
         return -1;
     } else {
-#ifndef RISCOS
-#ifndef MS_WINDOWS
-        struct stat statbuf;
-        int rv;
-
-        rv = stat(path, &statbuf);
-        if (rv == 0) {
-            /* it exists */
-            if (S_ISDIR(statbuf.st_mode)) {
-                /* it's a directory */
-                PyErr_SetString(PyExc_ImportError,
-                                "existing directory");
-                return -1;
-            }
-        }
-#else /* MS_WINDOWS */
-        DWORD rv;
-        /* see issue1293 and issue3677:
-         * stat() on Windows doesn't recognise paths like
-         * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
-         */
-        rv = GetFileAttributesA(path);
-        if (rv != INVALID_FILE_ATTRIBUTES) {
-            /* it exists */
-            if (rv & FILE_ATTRIBUTE_DIRECTORY) {
-                /* it's a directory */
-                PyErr_SetString(PyExc_ImportError,
-                                "existing directory");
-                return -1;
-            }
-        }
-#endif
-#else /* RISCOS */
-        if (object_exists(path)) {
-            /* it exists */
-            if (isdir(path)) {
-                /* it's a directory */
-                PyErr_SetString(PyExc_ImportError,
-                                "existing directory");
-                return -1;
-            }
-        }
-#endif
+		if(isdir(path)) {
+			PyErr_SetString(PyExc_ImportError,
+							"existing directory");
+			return -1;
+		}
     }
     return 0;
 }

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list