aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2017-09-24 22:08:23 -0700
committerGuy Harris <guy@alum.mit.edu>2017-09-25 05:09:23 +0000
commit097de92cfbb5dfa6baaee8c2122ca504ac09473b (patch)
treec6afb9008ff525039df660b5de83774e6a339c33
parent4861fbe121301a3e5b519f719f3447290001cb00 (diff)
pidl:Python: use of pytalloc_GenericObject_reference*() for pyrpc_{ex,im}port_union() wrapping
Pick up change from Samba: commit 2170f556299c6ab4ce33f22169ca26ecad3440e3 Author: Stefan Metzmacher <metze@samba.org> Date: Mon Feb 20 18:02:09 2017 +0100 pidl:Python: use of pytalloc_GenericObject_reference*() for pyrpc_{ex,im}port_union() wrapping BUG: https://bugzilla.samba.org/show_bug.cgi?id=12601 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Autobuild-User(master): Andrew Bartlett <abartlet@samba.org> Autobuild-Date(master): Sat Feb 25 06:33:33 CET 2017 on sn-devel-144 Change-Id: I4d3cb70c79531e5faf5249b67948cc6d354c1bd0 Reviewed-on: https://code.wireshark.org/review/23719 Reviewed-by: Guy Harris <guy@alum.mit.edu>
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/Python.pm85
1 files changed, 7 insertions, 78 deletions
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/Python.pm b/tools/pidl/lib/Parse/Pidl/Samba4/Python.pm
index e7b127d..f871e04 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/Python.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/Python.pm
@@ -1181,29 +1181,15 @@ sub PythonType($$$$)
my $py_methods = "NULL";
my $typename = mapTypeName($d);
- ##
- ## PyCapsule (starting with 2.7) vs. PyCObject (up to 3.2)
- ##
- ## As we need to support python 2.6, we can't use PyCapsule yet.
- ##
- ## When we'll get support fpr Python3 we'll have to emulate
- ## PyCObject using PyCapsule and convert these functions to
- ## use PyCapsule.
- ##
$self->pidl("static PyObject *py_$d->{NAME}\_import(PyTypeObject *type, PyObject *args, PyObject *kwargs)");
$self->pidl("{");
$self->indent;
$self->pidl("const char * const kwnames[] = { \"mem_ctx\", \"level\", \"in\", NULL };");
$self->pidl("PyObject *mem_ctx_obj = NULL;");
- $self->pidl("static const char *mem_ctx_type = \"TALLOC_CTX\";");
- $self->pidl("const char *mem_ctx_desc = NULL;");
$self->pidl("TALLOC_CTX *mem_ctx = NULL;");
$self->pidl("int level = 0;");
$self->pidl("PyObject *in_obj = NULL;");
- $self->pidl("static const char *in_type = \"$typename\";");
- $self->pidl("const char *in_desc = NULL;");
$self->pidl("$typename *in = NULL;");
- $self->pidl("int cmp;");
$self->pidl("");
$self->pidl("if (!PyArg_ParseTupleAndKeywords(args, kwargs, \"OiO:import\",");
$self->indent;
@@ -1216,54 +1202,20 @@ sub PythonType($$$$)
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");
- $self->pidl("if (!PyCObject_Check(mem_ctx_obj)) {");
- $self->indent;
- $self->pidl("PyErr_SetString(PyExc_TypeError, \"mem_ctx needs to be of type PyCObject!\");");
- $self->pidl("return NULL;");
- $self->deindent;
- $self->pidl("}");
- $self->pidl("mem_ctx_desc = (const char *)PyCObject_GetDesc(mem_ctx_obj);");
- $self->indent;
- $self->pidl("if (mem_ctx_desc == NULL) {");
- $self->pidl("PyErr_SetString(PyExc_TypeError, \"mem_ctx hash no PyCObject_GetDesc()!\");");
- $self->pidl("return NULL;");
- $self->deindent;
- $self->pidl("}");
- $self->pidl("cmp = strncmp(mem_ctx_type, mem_ctx_desc, strlen(mem_ctx_type) + 1);");
- $self->pidl("if (cmp != 0) {");
- $self->indent;
- $self->pidl("PyErr_Format(PyExc_TypeError, \"mem_ctx should have PyCObject_GetDesc() = %s!\", mem_ctx_type);");
- $self->pidl("return NULL;");
- $self->deindent;
- $self->pidl("}");
- $self->pidl("mem_ctx = PyCObject_AsVoidPtr(mem_ctx_obj);");
+ $self->pidl("mem_ctx = pytalloc_get_ptr(mem_ctx_obj);");
$self->pidl("if (mem_ctx == NULL) {");
$self->indent;
$self->pidl("PyErr_SetString(PyExc_TypeError, \"mem_ctx is NULL)!\");");
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");
- $self->pidl("if (!PyCObject_Check(in_obj)) {");
- $self->indent;
- $self->pidl("PyErr_SetString(PyExc_TypeError, \"in needs to be of type PyCObject!\");");
- $self->pidl("return NULL;");
- $self->deindent;
- $self->pidl("}");
- $self->pidl("in_desc = (const char *)PyCObject_GetDesc(in_obj);");
+ $self->pidl("in = ($typename *)pytalloc_get_ptr(in_obj);");
+ $self->pidl("if (in == NULL) {");
$self->indent;
- $self->pidl("if (in_desc == NULL) {");
- $self->pidl("PyErr_SetString(PyExc_TypeError, \"in hash no PyCObject_GetDesc()!\");");
+ $self->pidl("PyErr_Format(PyExc_TypeError, \"in needs to be a pointer to $typename!\");");
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");
- $self->pidl("cmp = strncmp(in_type, in_desc, strlen(in_type) + 1);");
- $self->pidl("if (cmp != 0) {");
- $self->indent;
- $self->pidl("PyErr_Format(PyExc_TypeError, \"in should have PyCObject_GetDesc() = %s!\", in_type);");
- $self->pidl("return NULL;");
- $self->deindent;
- $self->pidl("}");
- $self->pidl("in = ($typename *)PyCObject_AsVoidPtr(in_obj);");
$self->pidl("");
$self->pidl("return py_import_$d->{NAME}(mem_ctx, level, in);");
$self->deindent;
@@ -1275,14 +1227,10 @@ sub PythonType($$$$)
$self->indent;
$self->pidl("const char * const kwnames[] = { \"mem_ctx\", \"level\", \"in\", NULL };");
$self->pidl("PyObject *mem_ctx_obj = NULL;");
- $self->pidl("static const char *mem_ctx_type = \"TALLOC_CTX\";");
- $self->pidl("const char *mem_ctx_desc = NULL;");
$self->pidl("TALLOC_CTX *mem_ctx = NULL;");
$self->pidl("int level = 0;");
$self->pidl("PyObject *in = NULL;");
- $self->pidl("static const char *out_type = \"$typename\";");
$self->pidl("$typename *out = NULL;");
- $self->pidl("int cmp;");
$self->pidl("");
$self->pidl("if (!PyArg_ParseTupleAndKeywords(args, kwargs, \"OiO:import\",");
$self->indent;
@@ -1295,27 +1243,7 @@ sub PythonType($$$$)
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");
- $self->pidl("if (!PyCObject_Check(mem_ctx_obj)) {");
- $self->indent;
- $self->pidl("PyErr_SetString(PyExc_TypeError, \"mem_ctx needs to be of type PyCObject!\");");
- $self->pidl("return NULL;");
- $self->deindent;
- $self->pidl("}");
- $self->pidl("mem_ctx_desc = (const char *)PyCObject_GetDesc(mem_ctx_obj);");
- $self->indent;
- $self->pidl("if (mem_ctx_desc == NULL) {");
- $self->pidl("PyErr_SetString(PyExc_TypeError, \"mem_ctx hash no PyCObject_GetDesc()!\");");
- $self->pidl("return NULL;");
- $self->deindent;
- $self->pidl("}");
- $self->pidl("cmp = strncmp(mem_ctx_type, mem_ctx_desc, strlen(mem_ctx_type) + 1);");
- $self->pidl("if (cmp != 0) {");
- $self->indent;
- $self->pidl("PyErr_Format(PyExc_TypeError, \"mem_ctx should have PyCObject_GetDesc() = %s!\", mem_ctx_type);");
- $self->pidl("return NULL;");
- $self->deindent;
- $self->pidl("}");
- $self->pidl("mem_ctx = PyCObject_AsVoidPtr(mem_ctx_obj);");
+ $self->pidl("mem_ctx = pytalloc_get_ptr(mem_ctx_obj);");
$self->pidl("if (mem_ctx == NULL) {");
$self->indent;
$self->pidl("PyErr_SetString(PyExc_TypeError, \"mem_ctx is NULL)!\");");
@@ -1329,7 +1257,8 @@ sub PythonType($$$$)
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");
- $self->pidl("return PyCObject_FromVoidPtrAndDesc(out, discard_const_p(char, out_type), NULL);");
+ $self->pidl("");
+ $self->pidl("return pytalloc_GenericObject_reference(out);");
$self->deindent;
$self->pidl("}");
$self->pidl("");