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

source/build/pidl/swig.pm
source/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"