summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2001-11-09 21:59:42 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2001-11-09 21:59:42 (GMT)
commit89c3a22a2788cb85b89990543e33236cd60ba307 (patch)
treec7da0d69ab040e3e3f3f5b94752bf182d7b205c9 /Objects
parentda4ffeecf5106250ce1cb184b22f0c7e691e9f74 (diff)
downloadcpython-89c3a22a2788cb85b89990543e33236cd60ba307.zip
cpython-89c3a22a2788cb85b89990543e33236cd60ba307.tar.gz
cpython-89c3a22a2788cb85b89990543e33236cd60ba307.tar.bz2
Add PyObject_CheckReadBuffer(), which returns true if its argument
supports the single-segment readable buffer interface. Add documentation for this and other PyObject_XXXBuffer() calls.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/abstract.c64
1 files changed, 35 insertions, 29 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 938c2e2..0856f19 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -182,27 +182,37 @@ int PyObject_AsCharBuffer(PyObject *obj,
return -1;
}
pb = obj->ob_type->tp_as_buffer;
- if ( pb == NULL ||
+ if (pb == NULL ||
pb->bf_getcharbuffer == NULL ||
- pb->bf_getsegcount == NULL ) {
+ pb->bf_getsegcount == NULL) {
PyErr_SetString(PyExc_TypeError,
"expected a character buffer object");
- goto onError;
+ return -1;
}
- if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) {
+ if ((*pb->bf_getsegcount)(obj,NULL) != 1) {
PyErr_SetString(PyExc_TypeError,
"expected a single-segment buffer object");
- goto onError;
+ return -1;
}
- len = (*pb->bf_getcharbuffer)(obj,0,&pp);
+ len = (*pb->bf_getcharbuffer)(obj, 0, &pp);
if (len < 0)
- goto onError;
+ return -1;
*buffer = pp;
*buffer_len = len;
return 0;
+}
- onError:
- return -1;
+int
+PyObject_CheckReadBuffer(PyObject *obj)
+{
+ PyBufferProcs *pb = obj->ob_type->tp_as_buffer;
+
+ if (pb == NULL ||
+ pb->bf_getreadbuffer == NULL ||
+ pb->bf_getsegcount == NULL ||
+ (*pb->bf_getsegcount)(obj, NULL) != 1)
+ return 0;
+ return 1;
}
int PyObject_AsReadBuffer(PyObject *obj,
@@ -218,27 +228,24 @@ int PyObject_AsReadBuffer(PyObject *obj,
return -1;
}
pb = obj->ob_type->tp_as_buffer;
- if ( pb == NULL ||
+ if (pb == NULL ||
pb->bf_getreadbuffer == NULL ||
- pb->bf_getsegcount == NULL ) {
+ pb->bf_getsegcount == NULL) {
PyErr_SetString(PyExc_TypeError,
"expected a readable buffer object");
- goto onError;
+ return -1;
}
- if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) {
+ if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
PyErr_SetString(PyExc_TypeError,
"expected a single-segment buffer object");
- goto onError;
+ return -1;
}
- len = (*pb->bf_getreadbuffer)(obj,0,&pp);
+ len = (*pb->bf_getreadbuffer)(obj, 0, &pp);
if (len < 0)
- goto onError;
+ return -1;
*buffer = pp;
*buffer_len = len;
return 0;
-
- onError:
- return -1;
}
int PyObject_AsWriteBuffer(PyObject *obj,
@@ -254,27 +261,24 @@ int PyObject_AsWriteBuffer(PyObject *obj,
return -1;
}
pb = obj->ob_type->tp_as_buffer;
- if ( pb == NULL ||
+ if (pb == NULL ||
pb->bf_getwritebuffer == NULL ||
- pb->bf_getsegcount == NULL ) {
+ pb->bf_getsegcount == NULL) {
PyErr_SetString(PyExc_TypeError,
"expected a writeable buffer object");
- goto onError;
+ return -1;
}
- if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) {
+ if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
PyErr_SetString(PyExc_TypeError,
"expected a single-segment buffer object");
- goto onError;
+ return -1;
}
len = (*pb->bf_getwritebuffer)(obj,0,&pp);
if (len < 0)
- goto onError;
+ return -1;
*buffer = pp;
*buffer_len = len;
return 0;
-
- onError:
- return -1;
}
/* Operations on numbers */
@@ -1980,7 +1984,8 @@ PyObject_GetIter(PyObject *o)
if (f == NULL) {
if (PySequence_Check(o))
return PySeqIter_New(o);
- PyErr_SetString(PyExc_TypeError, "iteration over non-sequence");
+ PyErr_SetString(PyExc_TypeError,
+ "iteration over non-sequence");
return NULL;
}
else {
@@ -2021,3 +2026,4 @@ PyIter_Next(PyObject *iter)
PyErr_Clear();
return result;
}
+