r56123 - python/branches/cpy_merge/Modules/_bytes_iomodule.c python/branches/cpy_merge/Modules/_string_iomodule.c

Author: alexandre.vassalotti Date: Fri Jun 29 00:39:45 2007 New Revision: 56123 Modified: python/branches/cpy_merge/Modules/_bytes_iomodule.c python/branches/cpy_merge/Modules/_string_iomodule.c Log: Expose the internal buffer of StringIO and BytesIO objects. This makes subclassing these objects easier. Modified: python/branches/cpy_merge/Modules/_bytes_iomodule.c ============================================================================== --- python/branches/cpy_merge/Modules/_bytes_iomodule.c (original) +++ python/branches/cpy_merge/Modules/_bytes_iomodule.c Fri Jun 29 00:39:45 2007 @@ -142,6 +142,36 @@ return PyString_FromStringAndSize(self->buf, self->string_size); } +/* Not exposed as a method of BytesIO. */ +static int +bytes_io_setvalue(BytesIOObject *self, PyObject *value) +{ + if (self->buf == NULL) { + err_closed(); + return -1; + } + + self->pos = 0; + self->string_size = 0; + + if (value == NULL) + return 0; + + if (!PyString_Check(value)) { + PyErr_SetString(PyExc_TypeError, "need a string"); + return -1; + } + if ((write_bytes(self, PyString_AsString(value), + PyString_Size(value))) < 0) { + return -1; /* out of memory */ + } + /* Reset the position back to beginning-of-file, since + write_bytes changed it. */ + self->pos = 0; + + return 0; +} + static PyObject * bytes_io_isatty(BytesIOObject *self) { @@ -524,6 +554,8 @@ static PyGetSetDef BytesIO_getsetlist[] = { {"closed", (getter) bytes_io_get_closed, NULL, "True if the file is closed."}, + {"_buffer", (getter) bytes_io_getvalue, (setter) bytes_io_setvalue, + NULL}, {0}, /* sentinel */ }; Modified: python/branches/cpy_merge/Modules/_string_iomodule.c ============================================================================== --- python/branches/cpy_merge/Modules/_string_iomodule.c (original) +++ python/branches/cpy_merge/Modules/_string_iomodule.c Fri Jun 29 00:39:45 2007 @@ -141,6 +141,36 @@ return PyUnicode_FromUnicode(self->buf, self->string_size); } +/* Not exposed as a method of StringIO. */ +static int +string_io_setvalue(StringIOObject *self, PyObject *value) +{ + if (self->buf == NULL) { + err_closed(); + return -1; + } + + self->pos = 0; + self->string_size = 0; + + if (value == NULL) + return 0; + + if (!PyUnicode_Check(value)) { + PyErr_SetString(PyExc_TypeError, "need a unicode object"); + return -1; + } + if ((write_str(self, PyUnicode_AsUnicode(value), + PyUnicode_GetSize(value))) < 0) { + return -1; /* out of memory */ + } + /* Reset the position back to beginning-of-file, since + write_str changed it. */ + self->pos = 0; + + return 0; +} + static PyObject * string_io_isatty(StringIOObject *self) { @@ -530,6 +560,8 @@ static PyGetSetDef StringIO_getsetlist[] = { {"closed", (getter) string_io_get_closed, NULL, "True if the file is closed"}, + {"_buffer", (getter) string_io_getvalue, (setter) string_io_setvalue, + NULL}, {0}, /* sentinel */ };
participants (1)
-
alexandre.vassalotti