summaryrefslogtreecommitdiff
path: root/source4/build/pidl
diff options
context:
space:
mode:
authorTim Potter <tpot@samba.org>2004-10-15 12:21:49 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:59:55 -0500
commit8f00427136cd52e0e1cd1b12267515d872798c56 (patch)
tree655446e40cc858a7f2259c5f98342d25889637f1 /source4/build/pidl
parenta8ce1303832b46ff0c976e2d443d4f3ef293f6df (diff)
downloadsamba-8f00427136cd52e0e1cd1b12267515d872798c56.tar.gz
samba-8f00427136cd52e0e1cd1b12267515d872798c56.tar.bz2
samba-8f00427136cd52e0e1cd1b12267515d872798c56.zip
r2994: More cleanups. Move the generation of NTSTATUS and WERROR exceptions
from inside a swig %exception block and into the argout typemap. This will allow us to wrap functions that don't require exception handling, and also get rid of some ugly code in dcerpc.i (This used to be commit 558076cc8ddbdb563869f7d35150310217f30c31)
Diffstat (limited to 'source4/build/pidl')
-rw-r--r--source4/build/pidl/swig.pm21
1 files changed, 19 insertions, 2 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