diff options
-rw-r--r-- | source4/build/pidl/ndr.pm | 13 | ||||
-rw-r--r-- | source4/build/pidl/validator.pm | 3 |
2 files changed, 8 insertions, 8 deletions
diff --git a/source4/build/pidl/ndr.pm b/source4/build/pidl/ndr.pm index c460c92c95..8a654f7165 100644 --- a/source4/build/pidl/ndr.pm +++ b/source4/build/pidl/ndr.pm @@ -1820,15 +1820,18 @@ sub ParseFunctionElementPull($$) pidl "NDR_CHECK(ndr_pull_unique_ptr(ndr, &_ptr_$e->{NAME}));"; pidl "r->$inout.$e->{NAME} = NULL;"; pidl "if (_ptr_$e->{NAME}) {"; + indent; } elsif ($inout eq "out" && util::has_property($e, "ref")) { pidl "if (r->$inout.$e->{NAME}) {"; - } else { - pidl "{"; + indent; } - indent; + ParseArrayPull($e, "ndr", "r->$inout.", "NDR_SCALARS|NDR_BUFFERS"); - deindent; - pidl "}"; + + if (need_wire_pointer($e) or ($inout eq "out" and util::has_property($e, "ref"))) { + deindent; + pidl "}"; + } } else { if ($inout eq "out" && util::has_property($e, "ref")) { pidl "if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {"; diff --git a/source4/build/pidl/validator.pm b/source4/build/pidl/validator.pm index cf7df0dcb2..37f2e26e41 100644 --- a/source4/build/pidl/validator.pm +++ b/source4/build/pidl/validator.pm @@ -40,9 +40,6 @@ sub el_name($) sub ValidElement($) { my $e = shift; - if ($e->{POINTERS} && $e->{ARRAY_LEN}) { - fatal(el_name($e) . " : pidl cannot handle pointers to arrays. Use a substructure instead\n"); - } if (util::has_property($e, "ptr")) { fatal(el_name($e) . " : pidl does not support full NDR pointers yet\n"); |