r26110: Create separate function for connecting, add helper for creating result typemaps.
authorJelmer Vernooij <jelmer@samba.org>
Sun, 25 Nov 2007 03:53:54 +0000 (04:53 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 21 Dec 2007 04:46:08 +0000 (05:46 +0100)
(This used to be commit 9b5b77c399894fc7fdf0d61a14cfbcef6dbf678c)

source4/pidl/lib/Parse/Pidl/Samba4/SWIG.pm

index 1eea561c7a5cc2eaff18ad6c3e2cdb473a10828a..29f78359497bb6b622a436093a39b37f2b34970f 100644 (file)
@@ -36,6 +36,22 @@ sub IgnoreInterface($$)
        }
 }
 
+sub GenerateResultTypemap($)
+{
+       my $name = shift;
+       pidl "%typemap(in,numinputs=0) $name*result ($name tmp) {";
+       indent;
+       pidl "\$1 = &tmp;";
+       deindent;
+       pidl "}";
+       pidl "";
+       pidl "%typemap(argout) $name*result {";
+       indent;
+       pidl "\$result = SWIG_NewPointerObj(*\$1, \$1_descriptor, 0);";
+       deindent;
+       pidl "}";
+}
+
 sub ParseInterface($$)
 {
        my ($basename,$if) = @_;
@@ -46,12 +62,16 @@ sub ParseInterface($$)
        pidl "";
        pidl "\%extend $if->{NAME} {";
        indent();
-       pidl "NTSTATUS $if->{NAME} (const char *binding, struct cli_credentials *cred, TALLOC_CTX *mem_ctx, struct event_context *event, struct $if->{NAME} **result)";
-       pidl "{";
+       pidl "$if->{NAME} () {";
        indent;
-       pidl "*result = talloc(mem_ctx, struct $if->{NAME});";
+       pidl "return talloc(NULL, struct $if->{NAME});";
+       deindent;
+       pidl "}";
        pidl "";
-       pidl "return dcerpc_pipe_connect(mem_ctx, &(*result)->pipe, binding, &ndr_table_$if->{NAME}, cred, event);";
+       pidl "NTSTATUS connect (const char *binding, struct cli_credentials *cred, struct event_context *event)";
+       pidl "{";
+       indent;
+       pidl "return dcerpc_pipe_connect(\$self, &\$self->pipe, binding, &ndr_table_$if->{NAME}, cred, event);";
        deindent;
        pidl "}";
        pidl "";
@@ -85,7 +105,7 @@ sub ParseInterface($$)
                }
 
                pidl "";
-               pidl "status = dcerpc_$fn->{NAME}(self->pipe, mem_ctx, &r);";
+               pidl "status = dcerpc_$fn->{NAME}(\$self->pipe, mem_ctx, &r);";
                pidl "if (NT_STATUS_IS_ERR(status)) {";
                pidl "\treturn status;";
                pidl "}";