]> granicus.if.org Git - python/commitdiff
Merged revisions 68457 via svnmerge from
authorHirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
Fri, 23 Jan 2009 07:23:03 +0000 (07:23 +0000)
committerHirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
Fri, 23 Jan 2009 07:23:03 +0000 (07:23 +0000)
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

index a486383c762a463e6e47e66711df1c7cf7df400b..b79c048fa382bc83d03d666e343768412a0b2bed 100644 (file)
@@ -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;
 }