diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2012-09-05 18:11:49 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2012-09-05 18:11:49 (GMT) |
commit | c5eec0e387f3159288195ea8462345a9738d9a9d (patch) | |
tree | 0412053fe88b069308c05f50b0c70e705e7ea5b6 /Modules | |
parent | 80f4553d56e88c002a0085afdc8a33b9d0bf0202 (diff) | |
download | cpython-c5eec0e387f3159288195ea8462345a9738d9a9d.zip cpython-c5eec0e387f3159288195ea8462345a9738d9a9d.tar.gz cpython-c5eec0e387f3159288195ea8462345a9738d9a9d.tar.bz2 |
Issue #15841: The readable(), writable() and seekable() methods of io.BytesIO
and io.StringIO objects now raise ValueError when the object has been closed.
Patch by Alessandro Moura.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_io/bytesio.c | 20 | ||||
-rw-r--r-- | Modules/_io/stringio.c | 19 |
2 files changed, 31 insertions, 8 deletions
diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index ae8c1c1..6498320 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -106,7 +106,7 @@ resize_buffer(bytesio *self, size_t size) } /* Internal routine for writing a string of bytes to the buffer of a BytesIO - object. Returns the number of bytes wrote, or -1 on error. */ + object. Returns the number of bytes written, or -1 on error. */ static Py_ssize_t write_bytes(bytesio *self, const char *bytes, Py_ssize_t len) { @@ -156,10 +156,20 @@ bytesio_get_closed(bytesio *self) } } +PyDoc_STRVAR(readable_doc, +"readable() -> bool. Returns True if the IO object can be read."); + +PyDoc_STRVAR(writable_doc, +"writable() -> bool. Returns True if the IO object can be written."); + +PyDoc_STRVAR(seekable_doc, +"seekable() -> bool. Returns True if the IO object can be seeked."); + /* Generic getter for the writable, readable and seekable properties */ static PyObject * -return_true(bytesio *self) +return_not_closed(bytesio *self) { + CHECK_CLOSED(self); Py_RETURN_TRUE; } @@ -827,9 +837,9 @@ static PyGetSetDef bytesio_getsetlist[] = { }; static struct PyMethodDef bytesio_methods[] = { - {"readable", (PyCFunction)return_true, METH_NOARGS, NULL}, - {"seekable", (PyCFunction)return_true, METH_NOARGS, NULL}, - {"writable", (PyCFunction)return_true, METH_NOARGS, NULL}, + {"readable", (PyCFunction)return_not_closed, METH_NOARGS, readable_doc}, + {"seekable", (PyCFunction)return_not_closed, METH_NOARGS, seekable_doc}, + {"writable", (PyCFunction)return_not_closed, METH_NOARGS, writable_doc}, {"close", (PyCFunction)bytesio_close, METH_NOARGS, close_doc}, {"flush", (PyCFunction)bytesio_flush, METH_NOARGS, flush_doc}, {"isatty", (PyCFunction)bytesio_isatty, METH_NOARGS, isatty_doc}, diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c index e3de751..59a3905 100644 --- a/Modules/_io/stringio.c +++ b/Modules/_io/stringio.c @@ -632,10 +632,21 @@ stringio_init(stringio *self, PyObject *args, PyObject *kwds) } /* Properties and pseudo-properties */ + +PyDoc_STRVAR(stringio_readable_doc, +"readable() -> bool. Returns True if the IO object can be read."); + +PyDoc_STRVAR(stringio_writable_doc, +"writable() -> bool. Returns True if the IO object can be written."); + +PyDoc_STRVAR(stringio_seekable_doc, +"seekable() -> bool. Returns True if the IO object can be seeked."); + static PyObject * stringio_seekable(stringio *self, PyObject *args) { CHECK_INITIALIZED(self); + CHECK_CLOSED(self); Py_RETURN_TRUE; } @@ -643,6 +654,7 @@ static PyObject * stringio_readable(stringio *self, PyObject *args) { CHECK_INITIALIZED(self); + CHECK_CLOSED(self); Py_RETURN_TRUE; } @@ -650,6 +662,7 @@ static PyObject * stringio_writable(stringio *self, PyObject *args) { CHECK_INITIALIZED(self); + CHECK_CLOSED(self); Py_RETURN_TRUE; } @@ -817,9 +830,9 @@ static struct PyMethodDef stringio_methods[] = { {"seek", (PyCFunction)stringio_seek, METH_VARARGS, stringio_seek_doc}, {"write", (PyCFunction)stringio_write, METH_O, stringio_write_doc}, - {"seekable", (PyCFunction)stringio_seekable, METH_NOARGS}, - {"readable", (PyCFunction)stringio_readable, METH_NOARGS}, - {"writable", (PyCFunction)stringio_writable, METH_NOARGS}, + {"seekable", (PyCFunction)stringio_seekable, METH_NOARGS, stringio_seekable_doc}, + {"readable", (PyCFunction)stringio_readable, METH_NOARGS, stringio_readable_doc}, + {"writable", (PyCFunction)stringio_writable, METH_NOARGS, stringio_writable_doc}, {"__getstate__", (PyCFunction)stringio_getstate, METH_NOARGS}, {"__setstate__", (PyCFunction)stringio_setstate, METH_O}, |