PyErr_SetFromErrnoWithFilename(): New function which supports setting
an exception from errno, with a supplied filename (primarily used by IOError and OSError). If class exceptions are used then the exception is instantiated with a 3-tuple: (errno, strerror, filename). For backwards compatibility reasons, if string exceptions are used, filename is ignored. PyErr_SetFromErrno(): Implement in terms of PyErr_SetFromErrnoWithFilename().
This commit is contained in:
parent
2dfe4de614
commit
97d951533e
|
@ -277,8 +277,9 @@ PyErr_NoMemory()
|
|||
}
|
||||
|
||||
PyObject *
|
||||
PyErr_SetFromErrno(exc)
|
||||
PyErr_SetFromErrnoWithFilename(exc, filename)
|
||||
PyObject *exc;
|
||||
char *filename;
|
||||
{
|
||||
PyObject *v;
|
||||
int i = errno;
|
||||
|
@ -286,13 +287,24 @@ PyErr_SetFromErrno(exc)
|
|||
if (i == EINTR && PyErr_CheckSignals())
|
||||
return NULL;
|
||||
#endif
|
||||
v = Py_BuildValue("(is)", i, strerror(i));
|
||||
if (filename != NULL && Py_UseClassExceptionsFlag)
|
||||
v = Py_BuildValue("(iss)", i, strerror(i), filename);
|
||||
else
|
||||
v = Py_BuildValue("(is)", i, strerror(i));
|
||||
if (v != NULL) {
|
||||
PyErr_SetObject(exc, v);
|
||||
Py_DECREF(v);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
PyObject *
|
||||
PyErr_SetFromErrno(exc)
|
||||
PyObject *exc;
|
||||
{
|
||||
return PyErr_SetFromErrnoWithFilename(exc, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
PyErr_BadInternalCall()
|
||||
|
|
Loading…
Reference in New Issue