Commit 2ea9111c authored by Tim Peters's avatar Tim Peters

SF bug 538827: Python open w/ MSVC6: bad error msgs.

open_the_file:  Some (not all) flavors of Windows set errno to EINVAL
when passed a syntactically invalid filename.  Python turned that into an
incomprehensible complaint about the mode string.  Fixed by special-casing
MSVC.
parent 0986d825
...@@ -149,9 +149,22 @@ open_the_file(PyFileObject *f, char *name, char *mode) ...@@ -149,9 +149,22 @@ open_the_file(PyFileObject *f, char *name, char *mode)
} }
return NULL; return NULL;
} }
#endif
#ifdef _MSC_VER
/* MSVC 6 (Microsoft) leaves errno at 0 for bad mode strings,
* across all Windows flavors. When it sets EINVAL varies
* across Windows flavors, the exact conditions aren't
* documented, and the answer lies in the OS's implementation
* of Win32's CreateFile function (whose source is secret).
* Seems the best we can do is map EINVAL to ENOENT.
*/
if (errno == 0) /* bad mode string */
errno = EINVAL;
else if (errno == EINVAL) /* unknown, but not a mode string */
errno = ENOENT;
#endif #endif
if (errno == EINVAL) if (errno == EINVAL)
PyErr_Format(PyExc_IOError, "invalid argument: %s", PyErr_Format(PyExc_IOError, "invalid mode: %s",
mode); mode);
else else
PyErr_SetFromErrnoWithFilename(PyExc_IOError, name); PyErr_SetFromErrnoWithFilename(PyExc_IOError, name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment