From: Tim Peters Date: Mon, 8 Apr 2002 04:19:50 +0000 (+0000) Subject: SF bug 538827: Python open w/ MSVC6: bad error msgs. X-Git-Tag: v2.2.1~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c4d332d7a597298c61fbc7e50167f5d98c075651;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Objects/fileobject.c b/Objects/fileobject.c index 1430eef74195..7ac6efbbc831 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -127,9 +127,22 @@ open_the_file(PyFileObject *f, char *name, char *mode) } 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 if (errno == EINVAL) - PyErr_Format(PyExc_IOError, "invalid argument: %s", + PyErr_Format(PyExc_IOError, "invalid mode: %s", mode); else PyErr_SetFromErrnoWithFilename(PyExc_IOError, name);