summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2012-03-15 13:13:20 +0100
committerKarolin Seeger <kseeger@samba.org>2012-04-07 15:21:56 +0200
commite94415cf237d1e434daa5da70e6df0b4b6926bae (patch)
tree29ff02f0c199c0e0ad7a70e052715d2e6d3bcea5
parent25f68811af3399c6148fa5d31d932465e27a2125 (diff)
downloadsamba-e94415cf237d1e434daa5da70e6df0b4b6926bae.tar.gz
pidl/NDR/Parser: use helper variables for array size and length
metze
-rw-r--r--pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm22
1 files changed, 15 insertions, 7 deletions
diff --git a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index 8a69c25e9f0..c712b9d9d17 100644
--- a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -332,7 +332,8 @@ sub ParseArrayPullGetSize($$$$$$)
check_fully_dereferenced($e, $env));
}
- my $array_size = $size;
+ $self->pidl("size_$e->{NAME}_$l->{LEVEL_INDEX} = $size;");
+ my $array_size = "size_$e->{NAME}_$l->{LEVEL_INDEX}";
return $array_size;
}
@@ -350,7 +351,8 @@ sub ParseArrayPullGetLength($$$$$$;$)
my $array_length = $array_size;
if ($l->{IS_VARYING}) {
my $length = "ndr_get_array_length($ndr, " . get_pointer_to($var_name) .")";
- $array_length = $length;
+ $self->pidl("length_$e->{NAME}_$l->{LEVEL_INDEX} = $length;");
+ $array_length = "length_$e->{NAME}_$l->{LEVEL_INDEX}";
}
return $array_length;
@@ -1558,12 +1560,18 @@ sub DeclarePtrVariables($$)
}
}
-sub DeclareArrayVariables($$)
+sub DeclareArrayVariables($$;$)
{
- my ($self,$e) = @_;
+ my ($self,$e,$pull) = @_;
foreach my $l (@{$e->{LEVELS}}) {
next if ($l->{TYPE} ne "ARRAY");
+ if (defined($pull)) {
+ $self->pidl("uint32_t size_$e->{NAME}_$l->{LEVEL_INDEX} = 0;");
+ if ($l->{IS_VARYING}) {
+ $self->pidl("uint32_t length_$e->{NAME}_$l->{LEVEL_INDEX} = 0;");
+ }
+ }
next if has_fast_array($e,$l);
next if is_charset_array($e,$l);
$self->pidl("uint32_t cntr_$e->{NAME}_$l->{LEVEL_INDEX};");
@@ -1648,7 +1656,7 @@ sub ParseStructPull($$$$)
# declare any internal pointers we need
foreach my $e (@{$struct->{ELEMENTS}}) {
$self->DeclarePtrVariables($e);
- $self->DeclareArrayVariables($e);
+ $self->DeclareArrayVariables($e, "pull");
$self->DeclareMemCtxVariables($e);
}
@@ -1988,7 +1996,7 @@ sub ParseUnionPull($$$$)
next if ($double_cases{"$el->{NAME}"});
$self->DeclareMemCtxVariables($el);
$self->DeclarePtrVariables($el);
- $self->DeclareArrayVariables($el);
+ $self->DeclareArrayVariables($el, "pull");
$double_cases{"$el->{NAME}"} = 1;
}
@@ -2354,7 +2362,7 @@ sub ParseFunctionPull($$)
# declare any internal pointers we need
foreach my $e (@{$fn->{ELEMENTS}}) {
$self->DeclarePtrVariables($e);
- $self->DeclareArrayVariables($e);
+ $self->DeclareArrayVariables($e, "pull");
}
my %double_cases = ();