[Python-checkins] r56123 - python/branches/cpy_merge/Modules/_bytes_iomodule.c python/branches/cpy_merge/Modules/_string_iomodule.c
alexandre.vassalotti
python-checkins at python.org
Fri Jun 29 00:39:45 CEST 2007
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 */
};
More information about the Python-checkins
mailing list