summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/build/pidl/swig.pm21
-rw-r--r--source4/scripting/swig/dcerpc.i32
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"