[Python-checkins] r68873 - in python/branches/py3k: Python/import.c

hirokazu.yamamoto python-checkins at python.org
Fri Jan 23 08:23:03 CET 2009


Author: hirokazu.yamamoto
Date: Fri Jan 23 08:23:03 2009
New Revision: 68873

Log:
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.
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Python/import.c

Modified: python/branches/py3k/Python/import.c
==============================================================================
--- python/branches/py3k/Python/import.c	(original)
+++ python/branches/py3k/Python/import.c	Fri Jan 23 08:23:03 2009
@@ -3233,24 +3233,11 @@
 		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 @@
 				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;
 }


More information about the Python-checkins mailing list