diff options
-rw-r--r-- | source4/build/pidl/swig.pm | 25 | ||||
-rw-r--r-- | source4/scripting/swig/dcerpc.i | 10 |
2 files changed, 16 insertions, 19 deletions
diff --git a/source4/build/pidl/swig.pm b/source4/build/pidl/swig.pm index 6c0fb0f194..9736c56eb1 100644 --- a/source4/build/pidl/swig.pm +++ b/source4/build/pidl/swig.pm @@ -241,7 +241,7 @@ sub ParseFunction($) $result .= "\tif (!PyDict_Check(obj)) {\n"; $result .= "\t\tPyErr_Format(PyExc_TypeError, \"Expecting dict value for key '%s'\", name);\n"; - $result .= "\t\treturn NULL;\n"; + $result .= "\t\t\treturn NULL;\n"; $result .= "\t}\n\n"; $result .= "\ts = talloc(mem_ctx, sizeof(struct $fn->{NAME}));\n\n"; @@ -282,8 +282,7 @@ sub ParseFunction($) $result .= "\tTALLOC_CTX *mem_ctx = talloc_init(\"typemap(int) $fn->{NAME}\");\n\n"; $result .= "\t\$1 = $fn->{NAME}_ptr_from_python(mem_ctx, \$input, \"<function params>\");\n\n"; - $result .= "\tif (PyErr_Occurred())\n"; - $result .= "\t\t\treturn NULL;\n\n"; + $result .= "\tif (PyErr_Occurred()) return NULL;\n\n"; $result .= "}\n\n"; @@ -291,18 +290,8 @@ sub ParseFunction($) $result .= "%typemap(argout) struct $fn->{NAME} * {\n"; $result .= "\tTALLOC_CTX *mem_ctx = talloc_init(\"typemap(argout) $fn->{NAME}\");\n\n"; - $result .= "\tlong status = PyLong_AsLong(resultobj);\n"; - $result .= "\tPyObject *dict;\n"; - $result .= "\n"; - - $result .= "\tif (status != 0) {\n"; - $result .= "\t\tset_ntstatus_exception(status);\n"; - $result .= "\t\treturn NULL;\n"; - $result .= "\t}\n"; - $result .= "\n"; - $result .= "\tdict = $fn->{NAME}_ptr_to_python(mem_ctx, \$1);\n"; - - $result .= "\tresultobj = dict;\n"; + $result .= "\tresultobj = $fn->{NAME}_ptr_to_python(mem_ctx, \$1);\n\n"; + $result .= "\ttalloc_free(mem_ctx);\n"; $result .= "}\n\n"; # Function definitions @@ -337,8 +326,7 @@ sub ParseStruct($) $result .= "\t\treturn NULL;\n"; $result .= "\t}\n\n"; - $result .= "\tif (obj == Py_None) {\n"; - $result .= "\t\treturn NULL;\n"; + $result .= "\tif (obj == Py_None) return NULL;\n"; $result .= "\t}\n\n"; $result .= "\tif (!PyDict_Check(obj)) {\n"; @@ -575,8 +563,7 @@ sub Parse($) # Generate interface - $result = "/* Auto-generated by pidl */\n\n"; - $result = "/* Tastes like -*- C -*- */\n\n"; + $result .= "/* Auto-generated by pidl. Tastes like -*- C -*-. */\n\n"; foreach my $x (@{$idl}) { $result .= ParseHeader($x) if ($x->{TYPE} eq "INTERFACE"); diff --git a/source4/scripting/swig/dcerpc.i b/source4/scripting/swig/dcerpc.i index bded875b10..9677d4e62d 100644 --- a/source4/scripting/swig/dcerpc.i +++ b/source4/scripting/swig/dcerpc.i @@ -285,6 +285,16 @@ NTSTATUS dcerpc_pipe_connect(struct dcerpc_pipe **OUT, const char *username, const char *password); +/* Run this test after each wrapped function */ + +%exception { + $action + if (!NT_STATUS_IS_OK(result)) { + set_ntstatus_exception(NT_STATUS_V(result)); + return NULL; + } +} + %include "librpc/gen_ndr/misc.i" %include "librpc/gen_ndr/lsa.i" %include "librpc/gen_ndr/samr.i" |