summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>1998-07-23 16:05:56 (GMT)
committerBarry Warsaw <barry@python.org>1998-07-23 16:05:56 (GMT)
commit97d951533e71b74a1a2502feda4a587eb9fb7d98 (patch)
treee799721708e76101f9e078a80e472142794a5667 /Python
parent2dfe4de614b9006693d5053fbba462449609ba8e (diff)
downloadcpython-97d951533e71b74a1a2502feda4a587eb9fb7d98.zip
cpython-97d951533e71b74a1a2502feda4a587eb9fb7d98.tar.gz
cpython-97d951533e71b74a1a2502feda4a587eb9fb7d98.tar.bz2
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().
Diffstat (limited to 'Python')
-rw-r--r--Python/errors.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/Python/errors.c b/Python/errors.c
index 1a643c0..c0efbf1 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -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()