summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorKristján Valur Jónsson <sweskman@gmail.com>2013-03-19 23:50:51 (GMT)
committerKristján Valur Jónsson <sweskman@gmail.com>2013-03-19 23:50:51 (GMT)
commit1d108bc7148336f01d6df066ba1b27678c9bd1ca (patch)
tree74a30ae65b7215fe8d0350848f0258156bcf0e70 /Objects
parentacb6e85808ec2a4522c1e7cf665c85c02edf16ab (diff)
downloadcpython-1d108bc7148336f01d6df066ba1b27678c9bd1ca.zip
cpython-1d108bc7148336f01d6df066ba1b27678c9bd1ca.tar.gz
cpython-1d108bc7148336f01d6df066ba1b27678c9bd1ca.tar.bz2
Issue #10211 : Buffer object should support the new buffer interface.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/bufferobject.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c
index c52f0bc..23b97b2 100644
--- a/Objects/bufferobject.c
+++ b/Objects/bufferobject.c
@@ -802,6 +802,16 @@ buffer_getcharbuf(PyBufferObject *self, Py_ssize_t idx, const char **pp)
return size;
}
+static int buffer_getbuffer(PyBufferObject *self, Py_buffer *buf, int flags)
+{
+ void *ptr;
+ Py_ssize_t size;
+ if (!get_buf(self, &ptr, &size, ANY_BUFFER))
+ return -1;
+ return PyBuffer_FillInfo(buf, (PyObject*)self, ptr, size,
+ self->b_readonly, flags);
+}
+
static PySequenceMethods buffer_as_sequence = {
(lenfunc)buffer_length, /*sq_length*/
(binaryfunc)buffer_concat, /*sq_concat*/
@@ -823,6 +833,7 @@ static PyBufferProcs buffer_as_buffer = {
(writebufferproc)buffer_getwritebuf,
(segcountproc)buffer_getsegcount,
(charbufferproc)buffer_getcharbuf,
+ (getbufferproc)buffer_getbuffer,
};
PyTypeObject PyBuffer_Type = {
@@ -845,7 +856,7 @@ PyTypeObject PyBuffer_Type = {
PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */
&buffer_as_buffer, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GETCHARBUFFER, /* tp_flags */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GETCHARBUFFER | Py_TPFLAGS_HAVE_NEWBUFFER, /* tp_flags */
buffer_doc, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
@@ -864,4 +875,4 @@ PyTypeObject PyBuffer_Type = {
0, /* tp_init */
0, /* tp_alloc */
buffer_new, /* tp_new */
-};
+}; \ No newline at end of file