summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/build/pidl/ndr.pm13
-rw-r--r--source4/build/pidl/validator.pm3
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");