diff options
-rw-r--r-- | source4/build/pidl/swig.pm | 21 | ||||
-rw-r--r-- | source4/scripting/swig/dcerpc.i | 32 |
2 files changed, 19 insertions, 34 deletions
diff --git a/source4/build/pidl/swig.pm b/source4/build/pidl/swig.pm index 3694cfdec9..cdfe90450d 100644 --- a/source4/build/pidl/swig.pm +++ b/source4/build/pidl/swig.pm @@ -346,9 +346,26 @@ sub ParseFunction($) } else { $result .= "\tPyDict_SetItemString(temp, \"result\", PyLong_FromLong(W_ERROR_V(arg3->out.result)));\n"; } - $result .= "\tresultobj = temp;\n"; - $result .= "\ttalloc_free(mem_ctx);\n"; + $result .= "\n"; + + $result .= "\tresultobj = temp;\n\n"; + + + + $result .= "\tif (NT_STATUS_IS_ERR(result)) {\n"; + $result .= "\t\tset_ntstatus_exception(NT_STATUS_V(result));\n"; + $result .= "\t\tgoto fail;\n"; + $result .= "\t}\n"; + + if (!($fn->{RETURN_TYPE} eq "NTSTATUS")) { + $result .= "\tif (!W_ERROR_IS_OK(arg3->out.result) && \n"; + $result .= "\t\t!(W_ERROR_EQUAL(arg3->out.result, WERR_INSUFFICIENT_BUFFER))) {\n"; + $result .= "\t\tset_werror_exception(W_ERROR_V(arg3->out.result));\n"; + $result .= "\t\tgoto fail;\n"; + $result .= "\t}\n"; + } + $result .= "}\n\n"; # Function definitions diff --git a/source4/scripting/swig/dcerpc.i b/source4/scripting/swig/dcerpc.i index 5248164881..ab53a1dc51 100644 --- a/source4/scripting/swig/dcerpc.i +++ b/source4/scripting/swig/dcerpc.i @@ -347,40 +347,8 @@ NTSTATUS dcerpc_pipe_connect(struct dcerpc_pipe **OUT, const char *password); %include "librpc/gen_ndr/misc.i" - -/* Wrapped functions returning NTSTATUS */ - -%exception { - $action - - if (NT_STATUS_IS_ERR(result)) { - set_ntstatus_exception(NT_STATUS_V(result)); - return NULL; - } -} - %include "librpc/gen_ndr/lsa.i" %include "librpc/gen_ndr/samr.i" - -/* Wrapped functions returning WERROR */ - -%exception { - $action - - if (NT_STATUS_IS_ERR(result)) { - set_ntstatus_exception(NT_STATUS_V(result)); - return NULL; - } - - /* Emulate NT_STATUS_IS_ERR() */ - - if (!W_ERROR_IS_OK(arg3->out.result) && - !(W_ERROR_EQUAL(arg3->out.result, WERR_INSUFFICIENT_BUFFER))) { - set_werror_exception(W_ERROR_V(arg3->out.result)); - return NULL; - } -} - %include "librpc/gen_ndr/winreg.i" %include "librpc/gen_ndr/spoolss.i" |