From: Andrew Bartlett Date: Mon, 29 Feb 2016 20:26:29 +0000 (+1300) Subject: pytalloc: Add pytalloc_BaseObject_PyType_Ready() wrapper X-Git-Tag: talloc-2.1.6~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d850991ee2284050916761ea2f0ccac45df4eb4f;p=thirdparty%2Fsamba.git pytalloc: Add pytalloc_BaseObject_PyType_Ready() wrapper This avoids the need for the caller to set tp_base and tp_basicsize and so removes those as possible errors. Signed-off-by: Andrew Bartlett Reviewed-by: Garming Sam --- diff --git a/lib/talloc/ABI/pytalloc-util-2.1.6.sigs b/lib/talloc/ABI/pytalloc-util-2.1.6.sigs index 570be6309d0..666fec047f5 100644 --- a/lib/talloc/ABI/pytalloc-util-2.1.6.sigs +++ b/lib/talloc/ABI/pytalloc-util-2.1.6.sigs @@ -1,6 +1,7 @@ _pytalloc_get_mem_ctx: TALLOC_CTX *(PyObject *) _pytalloc_get_ptr: void *(PyObject *) _pytalloc_get_type: void *(PyObject *, const char *) +pytalloc_BaseObject_PyType_Ready: int (PyTypeObject *) pytalloc_BaseObject_check: int (PyObject *) pytalloc_BaseObject_size: size_t (void) pytalloc_CObject_FromTallocPtr: PyObject *(void *) diff --git a/lib/talloc/ABI/pytalloc-util.py3-2.1.6.sigs b/lib/talloc/ABI/pytalloc-util.py3-2.1.6.sigs index 1d3d6cb37ac..4410f110cb2 100644 --- a/lib/talloc/ABI/pytalloc-util.py3-2.1.6.sigs +++ b/lib/talloc/ABI/pytalloc-util.py3-2.1.6.sigs @@ -1,6 +1,7 @@ _pytalloc_get_mem_ctx: TALLOC_CTX *(PyObject *) _pytalloc_get_ptr: void *(PyObject *) _pytalloc_get_type: void *(PyObject *, const char *) +pytalloc_BaseObject_PyType_Ready: int (PyTypeObject *) pytalloc_BaseObject_check: int (PyObject *) pytalloc_BaseObject_size: size_t (void) pytalloc_Check: int (PyObject *) diff --git a/lib/talloc/pytalloc.h b/lib/talloc/pytalloc.h index 3c1cfda259d..6a0ac187288 100644 --- a/lib/talloc/pytalloc.h +++ b/lib/talloc/pytalloc.h @@ -63,5 +63,6 @@ PyObject *pytalloc_CObject_FromTallocPtr(void *); size_t pytalloc_BaseObject_size(void); +int pytalloc_BaseObject_PyType_Ready(PyTypeObject *type); #endif /* _PYTALLOC_H_ */ diff --git a/lib/talloc/pytalloc_guide.txt b/lib/talloc/pytalloc_guide.txt index b0351bb9eb0..8e9694e0177 100644 --- a/lib/talloc/pytalloc_guide.txt +++ b/lib/talloc/pytalloc_guide.txt @@ -71,6 +71,12 @@ Obtain a reference to the PyTypeObject for `pytalloc_Object`. The reference counter for the object will be incremented, so the caller will have to decrement it when it no longer needs it (using `Py_DECREF`). +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +int pytalloc_BaseObject_PyType_Ready(PyTypeObject *type); + +Wrapper for PyType_Ready() that will set the correct values into +the PyTypeObject to create a BaseObject + =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=- int pytalloc_Check(PyObject *) diff --git a/lib/talloc/pytalloc_util.c b/lib/talloc/pytalloc_util.c index 307e38a4c1e..cb71dc975cc 100644 --- a/lib/talloc/pytalloc_util.c +++ b/lib/talloc/pytalloc_util.c @@ -259,3 +259,17 @@ _PUBLIC_ TALLOC_CTX *_pytalloc_get_mem_ctx(PyObject *py_obj) } return NULL; } + +_PUBLIC_ int pytalloc_BaseObject_PyType_Ready(PyTypeObject *type) +{ + PyTypeObject *talloc_type = pytalloc_GetBaseObjectType(); + if (talloc_type == NULL) { + PyErr_Format(PyExc_TypeError, "pytalloc: unable to get talloc.BaseObject type"); + return -1; + } + + type->tp_base = talloc_type; + type->tp_basicsize = pytalloc_BaseObject_size(); + + return PyType_Ready(type); +}