From 98b40ad5902bc2e06db2f680774f3e3c2a3908d9 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 8 Jun 2006 14:50:21 +0000 Subject: Bug #1502805: don't alias file.__exit__ to file.close since the latter can return something that's true. --- Objects/fileobject.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Objects/fileobject.c b/Objects/fileobject.c index 29a5d4a..5e7f461 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -1635,6 +1635,20 @@ file_self(PyFileObject *f) return (PyObject *)f; } +static PyObject * +file_exit(PyFileObject *f, PyObject *args) +{ + PyObject *ret = file_close(f); + if (!ret) + /* If error occurred, pass through */ + return NULL; + Py_DECREF(ret); + /* We cannot return the result of close since a true + * value will be interpreted as "yes, swallow the + * exception if one was raised inside the with block". */ + Py_RETURN_NONE; +} + PyDoc_STRVAR(readline_doc, "readline([size]) -> next line from the file, as a string.\n" "\n" @@ -1722,6 +1736,9 @@ PyDoc_STRVAR(isatty_doc, PyDoc_STRVAR(enter_doc, "__enter__() -> self."); +PyDoc_STRVAR(exit_doc, + "__exit__(*excinfo) -> None. Closes the file."); + static PyMethodDef file_methods[] = { {"readline", (PyCFunction)file_readline, METH_VARARGS, readline_doc}, {"read", (PyCFunction)file_read, METH_VARARGS, read_doc}, @@ -1740,7 +1757,7 @@ static PyMethodDef file_methods[] = { {"close", (PyCFunction)file_close, METH_NOARGS, close_doc}, {"isatty", (PyCFunction)file_isatty, METH_NOARGS, isatty_doc}, {"__enter__", (PyCFunction)file_self, METH_NOARGS, enter_doc}, - {"__exit__", (PyCFunction)file_close, METH_VARARGS, close_doc}, + {"__exit__", (PyCFunction)file_exit, METH_VARARGS, exit_doc}, {NULL, NULL} /* sentinel */ }; -- cgit v0.12