r2994: More cleanups. Move the generation of NTSTATUS and WERROR exceptions
authorTim Potter <tpot@samba.org>
Fri, 15 Oct 2004 12:21:49 +0000 (12:21 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:59:55 +0000 (12:59 -0500)
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)

source4/build/pidl/swig.pm
source4/scripting/swig/dcerpc.i

index 3694cfdec97f7c8ac3d752067253e6064a452bdf..cdfe90450dab27fea1b94ad517b27bdf10ff09e8 100644 (file)
@@ -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
index 524816488181af19b3a75f0e6efbcdfd01aaf2fb..ab53a1dc51e727a1d472fd0985a23e5520056887 100644 (file)
@@ -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"