Use PyObject_CheckReadBuffer().
diff --git a/Modules/newmodule.c b/Modules/newmodule.c
index 9a9cbf1..6c29fe4 100644
--- a/Modules/newmodule.c
+++ b/Modules/newmodule.c
@@ -153,12 +153,7 @@
Py_DECREF(empty);
}
- pb = code->ob_type->tp_as_buffer;
- if (pb == NULL ||
- pb->bf_getreadbuffer == NULL ||
- pb->bf_getsegcount == NULL ||
- (*pb->bf_getsegcount)(code, NULL) != 1)
- {
+ if (!PyObject_CheckReadBuffer(code)) {
PyErr_SetString(PyExc_TypeError,
"bytecode object must be a single-segment read-only buffer");
return NULL;
diff --git a/Python/compile.c b/Python/compile.c
index 1a46064..b477513 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -268,7 +268,6 @@
{
PyCodeObject *co;
int i;
- PyBufferProcs *pb;
/* Check argument types */
if (argcount < 0 || nlocals < 0 ||
code == NULL ||
@@ -279,16 +278,8 @@
cellvars == NULL || !PyTuple_Check(cellvars) ||
name == NULL || !PyString_Check(name) ||
filename == NULL || !PyString_Check(filename) ||
- lnotab == NULL || !PyString_Check(lnotab)) {
- PyErr_BadInternalCall();
- return NULL;
- }
- pb = code->ob_type->tp_as_buffer;
- if (pb == NULL ||
- pb->bf_getreadbuffer == NULL ||
- pb->bf_getsegcount == NULL ||
- (*pb->bf_getsegcount)(code, NULL) != 1)
- {
+ lnotab == NULL || !PyString_Check(lnotab) ||
+ !PyObject_CheckReadBuffer(code)) {
PyErr_BadInternalCall();
return NULL;
}
diff --git a/Python/marshal.c b/Python/marshal.c
index 806b91c..0d21e84 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -108,7 +108,6 @@
w_object(PyObject *v, WFILE *p)
{
int i, n;
- PyBufferProcs *pb;
p->depth++;
@@ -249,13 +248,10 @@
w_short(co->co_firstlineno, p);
w_object(co->co_lnotab, p);
}
- else if ((pb = v->ob_type->tp_as_buffer) != NULL &&
- pb->bf_getsegcount != NULL &&
- pb->bf_getreadbuffer != NULL &&
- (*pb->bf_getsegcount)(v, NULL) == 1)
- {
+ else if (PyObject_CheckReadBuffer(v)) {
/* Write unknown buffer-style objects as a string */
char *s;
+ PyBufferProcs *pb = v->ob_type->tp_as_buffer;
w_byte(TYPE_STRING, p);
n = (*pb->bf_getreadbuffer)(v, 0, (void **)&s);
w_long((long)n, p);