1 /* 2 Unix SMB/CIFS implementation. 3 Samba utility functions 4 Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef _PYTALLOC_H_ 21 #define _PYTALLOC_H_ 22 23 #include <Python.h> 24 #include <talloc.h> 25 26 typedef struct { 27 PyObject_HEAD 28 TALLOC_CTX *talloc_ctx; 29 void *ptr; /* eg the array element */ 30 } pytalloc_Object; 31 32 /* Return the PyTypeObject for pytalloc_Object. Returns a borrowed reference. */ 33 PyTypeObject *pytalloc_GetObjectType(void); 34 35 /* Return the PyTypeObject for pytalloc_BaseObject. Returns a borrowed reference. */ 36 PyTypeObject *pytalloc_GetBaseObjectType(void); 37 38 /* Check whether a specific object is a talloc Object. */ 39 int pytalloc_Check(PyObject *); 40 41 int pytalloc_BaseObject_check(PyObject *); 42 43 int _pytalloc_check_type(PyObject *py_obj, const char *type_name); 44 #define pytalloc_check_type(py_obj, type) \ 45 _pytalloc_check_type((PyObject *)(py_obj), #type) 46 47 /* Retrieve the pointer for a pytalloc_object. Like talloc_get_type() 48 * but for pytalloc_Objects. */ 49 void *_pytalloc_get_type(PyObject *py_obj, const char *type_name); 50 #define pytalloc_get_type(py_obj, type) ((type *)_pytalloc_get_type((PyObject *)(py_obj), #type)) 51 52 void *_pytalloc_get_ptr(PyObject *py_obj); 53 #define pytalloc_get_ptr(py_obj) _pytalloc_get_ptr((PyObject *)(py_obj)) 54 TALLOC_CTX *_pytalloc_get_mem_ctx(PyObject *py_obj); 55 #define pytalloc_get_mem_ctx(py_obj) _pytalloc_get_mem_ctx((PyObject *)(py_obj)) 56 57 const char *_pytalloc_get_name(PyObject *py_obj); 58 #define pytalloc_get_name(py_obj) _pytalloc_get_name((PyObject *)(py_obj)) 59 60 61 PyObject *pytalloc_steal_ex(PyTypeObject *py_type, TALLOC_CTX *mem_ctx, void *ptr); 62 PyObject *pytalloc_steal(PyTypeObject *py_type, void *ptr); 63 PyObject *pytalloc_reference_ex(PyTypeObject *py_type, TALLOC_CTX *mem_ctx, void *ptr); 64 #define pytalloc_reference(py_type, talloc_ptr) pytalloc_reference_ex(py_type, talloc_ptr, talloc_ptr) 65 66 #define pytalloc_new(type, typeobj) pytalloc_steal(typeobj, talloc_zero(NULL, type)) 67 68 /* 69 * Wrap a generic talloc pointer into a talloc.GenericObject, 70 * this is a subclass of talloc.BaseObject. 71 */ 72 PyObject *pytalloc_GenericObject_steal_ex(TALLOC_CTX *mem_ctx, void *ptr); 73 #define pytalloc_GenericObject_steal(talloc_ptr) \ 74 pytalloc_GenericObject_steal_ex(talloc_ptr, talloc_ptr) 75 PyObject *pytalloc_GenericObject_reference_ex(TALLOC_CTX *mem_ctx, void *ptr); 76 #define pytalloc_GenericObject_reference(talloc_ptr) \ 77 pytalloc_GenericObject_reference_ex(talloc_ptr, talloc_ptr) 78 79 size_t pytalloc_BaseObject_size(void); 80 81 int pytalloc_BaseObject_PyType_Ready(PyTypeObject *type); 82 83 #endif /* _PYTALLOC_H_ */ 84