]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Backported fix for bug #1392 from py3k branch r58903.
authorChristian Heimes <christian@cheimes.de>
Wed, 7 Nov 2007 17:50:54 +0000 (17:50 +0000)
committerChristian Heimes <christian@cheimes.de>
Wed, 7 Nov 2007 17:50:54 +0000 (17:50 +0000)
Python/import.c

index e5f7cc61fcf8f4e781caf4ae007604ab74be3db6..265afb951b9e93866a59cbb55747d0b94e63a984 100644 (file)
@@ -2978,6 +2978,7 @@ static int
 NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
 {
        char *path;
+       Py_ssize_t pathlen;
 
        if (!_PyArg_NoKeywords("NullImporter()", kwds))
                return -1;
@@ -2986,7 +2987,8 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
                              &path))
                return -1;
 
-       if (strlen(path) == 0) {
+       pathlen = strlen(path);
+       if (pathlen == 0) {
                PyErr_SetString(PyExc_ImportError, "empty pathname");
                return -1;
        } else {
@@ -2994,7 +2996,23 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
                struct stat statbuf;
                int rv;
 
+#ifdef MS_WINDOWS
+               /* MS Windows' stat chokes on paths like C:\\path\\. Try to
+                * recover *one* time by stripping of a trailing slash or
+                * back slash. http://bugs.python.org/issue1293
+                */
                rv = stat(path, &statbuf);
+               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);
+               }
+#else
+               rv = stat(path, &statbuf);
+#endif
                if (rv == 0) {
                        /* it exists */
                        if (S_ISDIR(statbuf.st_mode)) {