]> granicus.if.org Git - python/commitdiff
Extracted Windows directory detection from NullImporter.__init__. This greatly simpli...
authorJason R. Coombs <jaraco@jaraco.com>
Fri, 13 Jan 2012 22:37:18 +0000 (17:37 -0500)
committerJason R. Coombs <jaraco@jaraco.com>
Fri, 13 Jan 2012 22:37:18 +0000 (17:37 -0500)
Python/import.c

index d04fa50961e24cc86e64636bfa12271d2ac68894..dd8710eb057c5ed82f1eee8aaa2d75a7333d594d 100644 (file)
@@ -114,19 +114,34 @@ static const struct filedescr _PyImport_StandardFiletab[] = {
 };
 #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 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
         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;
 }