pidl:NDR/Client: fix dcerpc_function() with [out,ref] pointers
authorStefan Metzmacher <metze@samba.org>
Wed, 25 Sep 2013 23:20:10 +0000 (01:20 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 7 Jan 2014 07:37:37 +0000 (08:37 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm

index 06cc65a2a618a688f8c72e930e039ff09aeda496..f02b8b20251bf0bcf9e27c12d29c7f02286d940d 100644 (file)
@@ -692,6 +692,20 @@ sub ParseFunction_Sync($$$$)
        }
        $self->pidl("");
 
+       $self->pidl("/* Out parameters */");
+       foreach my $e (@{$fn->{ELEMENTS}}) {
+               next unless grep(/out/, @{$e->{DIRECTION}});
+
+               $self->ParseCopyArgument($fn, $e, "r.out.", "_");
+       }
+       $self->pidl("");
+
+       if (defined($fn->{RETURN_TYPE})) {
+               $self->pidl("/* Result */");
+               $self->pidl("ZERO_STRUCT(r.out.result);");
+               $self->pidl("");
+       }
+
        $self->pidl("status = dcerpc_$name\_r(h, mem_ctx, &r);");
        $self->pidl("if (!NT_STATUS_IS_OK(status)) {");
        $self->indent;