summaryrefslogtreecommitdiffstats
path: root/source4
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2008-02-01 09:54:25 +0100
committerStefan Metzmacher <metze@samba.org>2008-02-02 11:16:01 +0100
commitb3d4f22b30b98d16d9a779e26cd9555fe18a67e4 (patch)
treeb0979b7de47442f0d923818e985c99b836695b16 /source4
parent9475a76afc41675a9c6a9b42d618a49821a8a5b4 (diff)
downloadsamba-b3d4f22b30b98d16d9a779e26cd9555fe18a67e4.tar.gz
samba-b3d4f22b30b98d16d9a779e26cd9555fe18a67e4.tar.xz
samba-b3d4f22b30b98d16d9a779e26cd9555fe18a67e4.zip
pidl/Samba4::NDR::Parser: fix $var_name for arrays of scalar reference types
uint32 num; nstring strings[num]; this should use 'r->strings' instead of '*r->strings' as the pointer to the array. metze (This used to be commit 7c7acae817cd00ab5c915742338b019af79e9193)
Diffstat (limited to 'source4')
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm17
1 files changed, 14 insertions, 3 deletions
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index 81e8a216259..281018d4ccb 100644
--- a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -42,19 +42,21 @@ sub append_prefix($$)
{
my ($e, $var_name) = @_;
my $pointers = 0;
+ my $arrays = 0;
foreach my $l (@{$e->{LEVELS}}) {
if ($l->{TYPE} eq "POINTER") {
$pointers++;
} elsif ($l->{TYPE} eq "ARRAY") {
+ $arrays++;
if (($pointers == 0) and
(not $l->{IS_FIXED}) and
(not $l->{IS_INLINE})) {
- return get_value_of($var_name);
+ return get_value_of($var_name);
}
} elsif ($l->{TYPE} eq "DATA") {
if (Parse::Pidl::Typelist::scalar_is_reference($l->{DATA_TYPE})) {
- return get_value_of($var_name) unless ($pointers);
+ return get_value_of($var_name) unless ($pointers or $arrays);
}
}
}
@@ -684,8 +686,17 @@ sub need_pointer_to($$$)
return 1 if $scalar_only;
}
+ my $arrays = 0;
+
+ foreach my $tl (@{$e->{LEVELS}}) {
+ last if $l == $tl;
+ if ($tl->{TYPE} eq "ARRAY") {
+ $arrays++;
+ }
+ }
+
if (Parse::Pidl::Typelist::scalar_is_reference($t)) {
- return 1;
+ return 1 unless $arrays;
}
return 0;