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.
This commit is contained in:
parent
0986d8250f
commit
2ea9111cf1
|
@ -149,15 +149,28 @@ 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);
|
||||
f = NULL;
|
||||
}
|
||||
if (f != NULL)
|
||||
if (f != NULL)
|
||||
f = dircheck(f);
|
||||
return (PyObject *)f;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue