Patch by Brian Hooper, somewhat augmented by GvR, to strip a trailing
backslash from the pathname argument to stat() on Windows -- while on
Unix, stat("/bin/") succeeds and does the same thing as stat("/bin"),
on Windows, stat("\\windows\\") fails while stat("\\windows") succeeds.
This modified version of the patch recognizes both / and \.

(This is odd behavior of the MS C library, since
os.listdir("\\windows\\") succeeds!)
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index c948b95..e269106 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -549,8 +549,36 @@
 	struct stat st;
 	char *path;
 	int res;
+
+#ifdef MS_WIN32
+      int pathlen;
+      char pathcopy[MAX_PATH];
+#endif /* MS_WIN32 */
+
 	if (!PyArg_ParseTuple(args, format, &path))
 		return NULL;
+
+#ifdef MS_WIN32
+	pathlen = strlen(path);
+	/* the library call can blow up if the file name is too long! */
+	if (pathlen > MAX_PATH) {
+		errno = ENAMETOOLONG;
+		return posix_error();
+	}
+
+	if ((pathlen > 0) && (path[pathlen-1] == '\\' || path[pathlen-1] == '/')) {
+		/* exception for drive root */
+		if (!((pathlen == 3) &&
+		      (path[1] == ':') &&
+		      (path[2] == '\\' || path[2] == '/')))
+		{
+			strncpy(pathcopy, path, pathlen);
+			pathcopy[pathlen-1] = '\0'; /* nuke the trailing backslash */
+			path = pathcopy;
+		}
+	}
+#endif /* MS_WIN32 */
+
 	Py_BEGIN_ALLOW_THREADS
 	res = (*statfunc)(path, &st);
 	Py_END_ALLOW_THREADS