Mercurial > cpython-lru_cache-weakref
diff Python/getargs.c @ 62149:9d49b744078c
Simplify getbuffer(): convertbuffer() fails anyway if bf_getbuffer is NULL
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Sun, 06 Jun 2010 20:27:51 +0000 |
| parents | 852d5ea625e7 |
| children | c3f2ed4d8e65 |
line wrap: on
line diff
--- a/Python/getargs.c Sun Jun 06 20:18:42 2010 +0000 +++ b/Python/getargs.c Sun Jun 06 20:27:51 2010 +0000 @@ -1410,7 +1410,7 @@ static Py_ssize_t convertbuffer(PyObject *arg, void **p, char **errmsg) { - PyBufferProcs *pb = arg->ob_type->tp_as_buffer; + PyBufferProcs *pb = Py_TYPE(arg)->tp_as_buffer; Py_ssize_t count; Py_buffer view; @@ -1438,31 +1438,23 @@ static int getbuffer(PyObject *arg, Py_buffer *view, char **errmsg) { - void *buf; - Py_ssize_t count; - PyBufferProcs *pb = arg->ob_type->tp_as_buffer; + PyBufferProcs *pb = Py_TYPE(arg)->tp_as_buffer; if (pb == NULL) { *errmsg = "bytes or buffer"; return -1; } - if (pb->bf_getbuffer) { - if (PyObject_GetBuffer(arg, view, 0) < 0) { - *errmsg = "convertible to a buffer"; - return -1; - } - if (!PyBuffer_IsContiguous(view, 'C')) { - *errmsg = "contiguous buffer"; - return -1; - } - return 0; + if (pb->bf_getbuffer == NULL) { + *errmsg = "convertible to a buffer"; + return -1; } - - count = convertbuffer(arg, &buf, errmsg); - if (count < 0) { + if (PyObject_GetBuffer(arg, view, 0) < 0) { *errmsg = "convertible to a buffer"; - return count; + return -1; } - PyBuffer_FillInfo(view, NULL, buf, count, 1, 0); + if (!PyBuffer_IsContiguous(view, 'C')) { + *errmsg = "contiguous buffer"; + return -1; + } return 0; }
