From 21cbf5f896fa4c968b46f05a47c0d59ae6e75938 Mon Sep 17 00:00:00 2001 From: Hirokazu Yamamoto Date: Fri, 23 Jan 2009 07:23:03 +0000 Subject: [PATCH] Merged revisions 68457 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r68457 | kristjan.jonsson | 2009-01-10 05:10:59 +0900 | 1 line Issue 3677: Fix import from UNC paths on Windows. ........ --- Python/import.c | 32 ++++++++++++++++++-------------- 1 file 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; } -- 2.50.0