summaryrefslogtreecommitdiff
path: root/source4/scripting/python
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2008-01-13 20:41:34 +0100
committerJelmer Vernooij <jelmer@samba.org>2008-01-14 19:53:05 +0100
commitbfab9862fcdd657a1bddafde49cdd182f89fcf8b (patch)
treedfd64c21365140ad4c7a7741aad3f45270854812 /source4/scripting/python
parentf7a0ef04f00cd44845bcee0a171e4cc05a545350 (diff)
downloadsamba-bfab9862fcdd657a1bddafde49cdd182f89fcf8b.tar.gz
samba-bfab9862fcdd657a1bddafde49cdd182f89fcf8b.tar.bz2
samba-bfab9862fcdd657a1bddafde49cdd182f89fcf8b.zip
python: Allow wrapping pointers within talloc'ed memory that are not talloc contexts.
(This used to be commit 9c038a74113fb55ed5eb12a7d0ae4a46bad9050c)
Diffstat (limited to 'source4/scripting/python')
-rw-r--r--source4/scripting/python/pytalloc.c10
-rw-r--r--source4/scripting/python/pytalloc.h11
2 files changed, 14 insertions, 7 deletions
diff --git a/source4/scripting/python/pytalloc.c b/source4/scripting/python/pytalloc.c
index 4032ff75a4..d0b8cb83f2 100644
--- a/source4/scripting/python/pytalloc.c
+++ b/source4/scripting/python/pytalloc.c
@@ -22,14 +22,16 @@
void py_talloc_dealloc(PyObject* self)
{
py_talloc_Object *obj = (py_talloc_Object *)self;
- talloc_free(obj->talloc_ptr);
+ talloc_free(obj->talloc_ctx);
PyObject_Del(self);
}
-PyObject *py_talloc_import(PyTypeObject *py_type, void *ptr)
+PyObject *py_talloc_import(PyTypeObject *py_type, TALLOC_CTX *mem_ctx,
+ void *ptr)
{
PyObject *ret = PyObject_New(py_talloc_Object, &py_type);
- ret->talloc_ptr = talloc_reference(NULL, ptr);
+ ret->talloc_ctx = talloc_reference(mem_ctx, ptr);
+ ret->ptr = ptr;
return ret;
}
@@ -38,5 +40,5 @@ PyObject *py_talloc_default_repr(PyObject *py_obj)
py_talloc_Object *obj = (py_talloc_Object *)py_obj;
return PyString_FromFormat("<talloc: %s>",
- talloc_get_name(obj->talloc_ptr));
+ talloc_get_name(obj->talloc_ctx));
}
diff --git a/source4/scripting/python/pytalloc.h b/source4/scripting/python/pytalloc.h
index 735829bfcb..aad5840a67 100644
--- a/source4/scripting/python/pytalloc.h
+++ b/source4/scripting/python/pytalloc.h
@@ -24,7 +24,8 @@
typedef struct {
PyObject_HEAD
- void *talloc_ptr;
+ TALLOC_CTX *talloc_ctx;
+ void *ptr;
} py_talloc_Object;
/* Deallocate a py_talloc_Object */
@@ -36,9 +37,13 @@ void py_talloc_dealloc(PyObject* self);
/* FIXME: Call PyErr_SetString(PyExc_TypeError, "expected " __STR(type) ")
* when talloc_get_type() returns NULL. */
#define py_talloc_get_type(py_obj, type) \
- talloc_get_type(((py_talloc_Object *)py_obj)->talloc_ptr, type)
+ talloc_get_type(py_talloc_get_ptr(py_obj), type)
-PyObject *py_talloc_import(PyTypeObject *py_type, void *ptr);
+#define py_talloc_get_ptr(py_obj) ((py_talloc_Object *)py_obj)->ptr
+#define py_talloc_get_mem_ctx(py_obj) ((py_talloc_Object *)py_obj)->talloc_ctx
+
+PyObject *py_talloc_import_ex(PyTypeObject *py_type, TALLOC_CTX *mem_ctx, void *ptr);
+#define py_talloc_import(py_type, talloc_ptr) py_talloc_import_ex(py_type, talloc_ptr, talloc_ptr)
/* Sane default implementation of reprfunc. */
PyObject *py_talloc_default_repr(PyObject *py_obj);