[Python-checkins] r68457 - python/trunk/Python/import.c

kristjan.jonsson python-checkins at python.org
Fri Jan 9 21:11:00 CET 2009


Author: kristjan.jonsson
Date: Fri Jan  9 21:10:59 2009
New Revision: 68457

Log:
Issue 3677:  Fix import from UNC paths on Windows.

Modified:
   python/trunk/Python/import.c

Modified: python/trunk/Python/import.c
==============================================================================
--- python/trunk/Python/import.c	(original)
+++ python/trunk/Python/import.c	Fri Jan  9 21:10:59 2009
@@ -3198,24 +3198,11 @@
 		return -1;
 	} else {
 #ifndef RISCOS
+#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
 		if (rv == 0) {
 			/* it exists */
 			if (S_ISDIR(statbuf.st_mode)) {
@@ -3225,7 +3212,24 @@
 				return -1;
 			}
 		}
-#else
+#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)) {


More information about the Python-checkins mailing list