diff options
Diffstat (limited to 'Python')
-rw-r--r-- | Python/import.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/Python/import.c b/Python/import.c index a486383c76..b79c048fa3 100644 --- a/Python/import.c +++ b/Python/import.c @@ -3233,24 +3233,11 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds) PyErr_SetString(PyExc_ImportError, "empty pathname"); return -1; } else { +#ifndef MS_WINDOWS struct stat statbuf; int rv; rv = stat(path, &statbuf); -#ifdef MS_WINDOWS - /* MS Windows stat() chokes on paths like C:\path\. Try to - * recover *one* time by stripping off a trailing slash or - * backslash. http://bugs.python.org/issue1293 - */ - if (rv != 0 && pathlen <= MAXPATHLEN && - (path[pathlen-1] == '/' || path[pathlen-1] == '\\')) { - char mangled[MAXPATHLEN+1]; - - strcpy(mangled, path); - mangled[pathlen-1] = '\0'; - rv = stat(mangled, &statbuf); - } -#endif PyMem_Free(path); if (rv == 0) { /* it exists */ @@ -3261,6 +3248,23 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds) 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 } return 0; } |