Commit d6ccd3df authored by Jason R. Coombs's avatar Jason R. Coombs

Extracted Windows directory detection from NullImporter.__init__. This greatly...

Extracted Windows directory detection from NullImporter.__init__. This greatly simplifies the code and fixes issue6727.
parent 12cf9a61
...@@ -114,19 +114,34 @@ static const struct filedescr _PyImport_StandardFiletab[] = { ...@@ -114,19 +114,34 @@ static const struct filedescr _PyImport_StandardFiletab[] = {
}; };
#endif #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) { int isdir(char *path) {
struct stat statbuf; struct stat statbuf;
return stat(path, &statbuf) == 0 && S_ISDIR(statbuf.st_mode); return stat(path, &statbuf) == 0 && S_ISDIR(statbuf.st_mode);
} }
#else #else
#ifdef RISCOS
/* with RISCOS, isdir is in unixstuff */ /* with RISCOS, isdir is in unixstuff */
#ifndef RISCOS #else
int isdir(char *path) { int isdir(char *path) {
return 0; return 0;
} }
#endif #endif /* RISCOS */
#endif #endif /* HAVE_STAT */
#endif /* MS_WINDOWS */
/* Initialize things */ /* Initialize things */
...@@ -3185,50 +3200,12 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds) ...@@ -3185,50 +3200,12 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
PyErr_SetString(PyExc_ImportError, "empty pathname"); PyErr_SetString(PyExc_ImportError, "empty pathname");
return -1; return -1;
} else { } else {
#ifndef RISCOS if(isdir(path)) {
#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, PyErr_SetString(PyExc_ImportError,
"existing directory"); "existing directory");
return -1; 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
}
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment