From 1db7070217d80f0889aed44ceb1f11a82265b3f0 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Thu, 8 Oct 1998 02:18:52 +0000 Subject: Greg Stein: Implement the new bf_getcharbuffer function, indicating that (as far as the data type is concerned!) this is character data. --- Objects/bufferobject.c | 20 ++++++++++++++++++-- Objects/stringobject.c | 20 ++++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c index 9be1e43..091688d 100644 --- a/Objects/bufferobject.c +++ b/Objects/bufferobject.c @@ -523,7 +523,7 @@ buffer_getreadbuf(self, idx, pp) { if ( idx != 0 ) { PyErr_SetString(PyExc_SystemError, - "Accessing non-existent buffer segment"); + "accessing non-existent buffer segment"); return -1; } *pp = self->b_ptr; @@ -554,6 +554,21 @@ buffer_getsegcount(self, lenp) return 1; } +static int +buffer_getcharbuf(self, idx, pp) + PyBufferObject *self; + int idx; + const char ** pp; +{ + if ( idx != 0 ) { + PyErr_SetString(PyExc_SystemError, + "accessing non-existent buffer segment"); + return -1; + } + *pp = (const char *)self->b_ptr; + return self->b_size; +} + static PySequenceMethods buffer_as_sequence = { (inquiry)buffer_length, /*sq_length*/ @@ -569,6 +584,7 @@ static PyBufferProcs buffer_as_buffer = { (getreadbufferproc)buffer_getreadbuf, (getwritebufferproc)buffer_getwritebuf, (getsegcountproc)buffer_getsegcount, + (getcharbufferproc)buffer_getcharbuf, }; PyTypeObject PyBuffer_Type = { @@ -592,7 +608,7 @@ PyTypeObject PyBuffer_Type = { 0, /*tp_getattro*/ 0, /*tp_setattro*/ &buffer_as_buffer, /*tp_as_buffer*/ - 0, /*tp_xxx4*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ }; diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 648e6e2..1f1a41b 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -465,7 +465,7 @@ string_buffer_getreadbuf(self, index, ptr) { if ( index != 0 ) { PyErr_SetString(PyExc_SystemError, - "Accessing non-existent string segment"); + "accessing non-existent string segment"); return -1; } *ptr = (void *)self->ob_sval; @@ -493,6 +493,21 @@ string_buffer_getsegcount(self, lenp) return 1; } +static int +string_buffer_getcharbuf(self, index, ptr) + PyStringObject *self; + int index; + const char **ptr; +{ + if ( index != 0 ) { + PyErr_SetString(PyExc_SystemError, + "accessing non-existent string segment"); + return -1; + } + *ptr = self->ob_sval; + return self->ob_size; +} + static PySequenceMethods string_as_sequence = { (inquiry)string_length, /*sq_length*/ (binaryfunc)string_concat, /*sq_concat*/ @@ -507,6 +522,7 @@ static PyBufferProcs string_as_buffer = { (getreadbufferproc)string_buffer_getreadbuf, (getwritebufferproc)string_buffer_getwritebuf, (getsegcountproc)string_buffer_getsegcount, + (getcharbufferproc)string_buffer_getcharbuf, }; PyTypeObject PyString_Type = { @@ -530,7 +546,7 @@ PyTypeObject PyString_Type = { 0, /*tp_getattro*/ 0, /*tp_setattro*/ &string_as_buffer, /*tp_as_buffer*/ - 0, /*tp_xxx4*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ }; -- cgit v0.12