diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2012-01-13 22:37:18 (GMT) |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2012-01-13 22:37:18 (GMT) |
commit | fa93cf8e3ea4f34804932ffdf841173ed0f1d088 (patch) | |
tree | 8aa0f097d7dfbc27e7d90ffb1aabd31c2ab0cd00 /Python | |
parent | 925ff7495bbeff59327b4738272ea0b95071beeb (diff) | |
download | cpython-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.c | 71 |
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; } |