From 97d951533e71b74a1a2502feda4a587eb9fb7d98 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Thu, 23 Jul 1998 16:05:56 +0000 Subject: 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(). --- Python/errors.c | 16 ++++++++++++++-- 1 file 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() -- cgit v0.12