bpo-40170: Convert PyObject_CheckBuffer() macro to a function (GH-19376)

Convert PyObject_CheckBuffer() macro to a function to hide
implementation details: the macro accessed directly the
PyTypeObject.tp_as_buffer member.
This commit is contained in:
Victor Stinner 2020-04-08 01:13:53 +02:00 committed by GitHub
parent 9205520d8c
commit ef5c615f5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 3 deletions

View File

@ -264,9 +264,7 @@ PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t);
/* === New Buffer API ============================================ */ /* === New Buffer API ============================================ */
/* Return 1 if the getbuffer function is available, otherwise return 0. */ /* Return 1 if the getbuffer function is available, otherwise return 0. */
#define PyObject_CheckBuffer(obj) \ PyAPI_FUNC(int) PyObject_CheckBuffer(PyObject *obj);
((Py_TYPE(obj)->tp_as_buffer != NULL) && \
(Py_TYPE(obj)->tp_as_buffer->bf_getbuffer != NULL))
/* This is a C-API version of the getbuffer function call. It checks /* This is a C-API version of the getbuffer function call. It checks
to make sure object has the required function pointer and issues the to make sure object has the required function pointer and issues the

View File

@ -0,0 +1,3 @@
Convert :c:func:`PyObject_CheckBuffer` macro to a function to hide
implementation details: the macro accessed directly the
:c:member:`PyTypeObject.tp_as_buffer` member.

View File

@ -277,6 +277,16 @@ PyObject_DelItemString(PyObject *o, const char *key)
return ret; return ret;
} }
/* Return 1 if the getbuffer function is available, otherwise return 0. */
int
PyObject_CheckBuffer(PyObject *obj)
{
PyBufferProcs *tp_as_buffer = Py_TYPE(obj)->tp_as_buffer;
return (tp_as_buffer != NULL && tp_as_buffer->bf_getbuffer != NULL);
}
/* We release the buffer right after use of this function which could /* We release the buffer right after use of this function which could
cause issues later on. Don't use these functions in new code. cause issues later on. Don't use these functions in new code.
*/ */