mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
80f2b36efb
This new object not only avoids the ABI issues of talloc.Object it stores one more pointer, being the start of the array, and so can be used to fix the PIDL bindings/talloc refcount issue. Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Garming Sam <garming@catalyst.net.nz>
68 lines
2.4 KiB
C
68 lines
2.4 KiB
C
/*
|
|
Unix SMB/CIFS implementation.
|
|
Samba utility functions
|
|
Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef _PYTALLOC_H_
|
|
#define _PYTALLOC_H_
|
|
|
|
#include <Python.h>
|
|
#include <talloc.h>
|
|
|
|
typedef struct {
|
|
PyObject_HEAD
|
|
TALLOC_CTX *talloc_ctx;
|
|
void *ptr; /* eg the array element */
|
|
} pytalloc_Object;
|
|
|
|
/* Return the PyTypeObject for pytalloc_Object. Returns a new reference. */
|
|
PyTypeObject *pytalloc_GetObjectType(void);
|
|
|
|
/* Return the PyTypeObject for pytalloc_BaseObject. Returns a new reference. */
|
|
PyTypeObject *pytalloc_GetBaseObjectType(void);
|
|
|
|
/* Check whether a specific object is a talloc Object. */
|
|
int pytalloc_Check(PyObject *);
|
|
|
|
int pytalloc_BaseObject_check(PyObject *);
|
|
|
|
/* Retrieve the pointer for a pytalloc_object. Like talloc_get_type()
|
|
* but for pytalloc_Objects. */
|
|
void *_pytalloc_get_type(PyObject *py_obj, const char *type_name);
|
|
#define pytalloc_get_type(py_obj, type) ((type *)_pytalloc_get_type((PyObject *)(py_obj), #type))
|
|
|
|
void *_pytalloc_get_ptr(PyObject *py_obj);
|
|
#define pytalloc_get_ptr(py_obj) _pytalloc_get_ptr((PyObject *)(py_obj))
|
|
TALLOC_CTX *_pytalloc_get_mem_ctx(PyObject *py_obj);
|
|
#define pytalloc_get_mem_ctx(py_obj) _pytalloc_get_mem_ctx((PyObject *)(py_obj))
|
|
|
|
PyObject *pytalloc_steal_ex(PyTypeObject *py_type, TALLOC_CTX *mem_ctx, void *ptr);
|
|
PyObject *pytalloc_steal(PyTypeObject *py_type, void *ptr);
|
|
PyObject *pytalloc_reference_ex(PyTypeObject *py_type, TALLOC_CTX *mem_ctx, void *ptr);
|
|
#define pytalloc_reference(py_type, talloc_ptr) pytalloc_reference_ex(py_type, talloc_ptr, talloc_ptr)
|
|
|
|
#define pytalloc_new(type, typeobj) pytalloc_steal(typeobj, talloc_zero(NULL, type))
|
|
|
|
#if PY_MAJOR_VERSION < 3
|
|
PyObject *pytalloc_CObject_FromTallocPtr(void *);
|
|
#endif
|
|
|
|
size_t pytalloc_BaseObject_size(void);
|
|
|
|
|
|
#endif /* _PYTALLOC_H_ */
|