From c1a9b68623a663c36451df31aa44fe5f0e22af17 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 21 Dec 2008 00:37:31 +0100 Subject: Create and use convenience function for creating new talloc-wrapping Python Objects, support subtypes of DCE/RPC interfaces properly --- lib/talloc/pytalloc.h | 2 ++ pidl/lib/Parse/Pidl/Samba4/Python.pm | 7 +++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/talloc/pytalloc.h b/lib/talloc/pytalloc.h index bff6f31d27..e6745f937d 100644 --- a/lib/talloc/pytalloc.h +++ b/lib/talloc/pytalloc.h @@ -48,4 +48,6 @@ PyObject *py_talloc_import_ex(PyTypeObject *py_type, TALLOC_CTX *mem_ctx, void * /* Sane default implementation of reprfunc. */ PyObject *py_talloc_default_repr(PyObject *py_obj); +#define py_talloc_new(type, typeobj) py_talloc_import(typeobj, talloc_zero(NULL, type)) + #endif /* _PY_TALLOC_H_ */ diff --git a/pidl/lib/Parse/Pidl/Samba4/Python.pm b/pidl/lib/Parse/Pidl/Samba4/Python.pm index 15dbd67b7c..120a35a1cf 100644 --- a/pidl/lib/Parse/Pidl/Samba4/Python.pm +++ b/pidl/lib/Parse/Pidl/Samba4/Python.pm @@ -224,8 +224,7 @@ sub PythonStruct($$$$$$) $self->pidl("static PyObject *py_$name\_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)"); $self->pidl("{"); $self->indent; - $self->pidl("$cname *ret = talloc_zero(NULL, $cname);"); - $self->pidl("return py_talloc_import(type, ret);"); + $self->pidl("return py_talloc_new($cname, type);"); $self->deindent; $self->pidl("}"); $self->pidl(""); @@ -677,7 +676,7 @@ sub Interface($$$) $self->pidl("};"); $self->pidl(""); - $self->pidl("static PyObject *interface_$interface->{NAME}_new(PyTypeObject *self, PyObject *args, PyObject *kwargs)"); + $self->pidl("static PyObject *interface_$interface->{NAME}_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)"); $self->pidl("{"); $self->indent; $self->pidl("dcerpc_InterfaceObject *ret;"); @@ -728,7 +727,7 @@ sub Interface($$$) $self->deindent; $self->pidl("}"); - $self->pidl("ret = PyObject_New(dcerpc_InterfaceObject, &$interface->{NAME}_InterfaceType);"); + $self->pidl("ret = PyObject_New(dcerpc_InterfaceObject, type);"); $self->pidl(""); $self->pidl("event_ctx = event_context_init(mem_ctx);"); $self->pidl(""); -- cgit