summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2012-01-13 22:37:18 (GMT)
committerJason R. Coombs <jaraco@jaraco.com>2012-01-13 22:37:18 (GMT)
commitfa93cf8e3ea4f34804932ffdf841173ed0f1d088 (patch)
tree8aa0f097d7dfbc27e7d90ffb1aabd31c2ab0cd00 /Python
parent925ff7495bbeff59327b4738272ea0b95071beeb (diff)
downloadcpython-fa93cf8e3ea4f34804932ffdf841173ed0f1d088.zip
cpython-fa93cf8e3ea4f34804932ffdf841173ed0f1d088.tar.gz
cpython-fa93cf8e3ea4f34804932ffdf841173ed0f1d088.tar.bz2
Extracted Windows directory detection from NullImporter.__init__. This greatly simplifies the code and fixes issue6727.
Diffstat (limited to 'Python')
-rw-r--r--Python/import.c71
1 files changed, 24 insertions, 47 deletions
diff --git a/Python/import.c b/Python/import.c
index d04fa50..dd8710e 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -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;
}