]> granicus.if.org Git - python/commitdiff
PyErr_SetFromErrnoWithFilename(): New function which supports setting
authorBarry Warsaw <barry@python.org>
Thu, 23 Jul 1998 16:05:56 +0000 (16:05 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 23 Jul 1998 16:05:56 +0000 (16:05 +0000)
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

index 1a643c0facbe2b9fe2abaf395c7c1b4a27391be0..c0efbf1b2657dee61b2cbfaeb950e3868623b97b 100644 (file)
@@ -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()