svn commit: samba r6912 - in branches/tmp/pidl2/source/build/pidl: .
jelmer at samba.org
jelmer at samba.org
Thu May 19 19:57:47 GMT 2005
Author: jelmer
Date: 2005-05-19 19:57:47 +0000 (Thu, 19 May 2005)
New Revision: 6912
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=6912
Log:
Fix handling of arrays with deferred data.
Modified:
branches/tmp/pidl2/source/build/pidl/ndr.pm
branches/tmp/pidl2/source/build/pidl/ndr_parser.pm
Changeset:
Modified: branches/tmp/pidl2/source/build/pidl/ndr.pm
===================================================================
--- branches/tmp/pidl2/source/build/pidl/ndr.pm 2005-05-19 17:32:33 UTC (rev 6911)
+++ branches/tmp/pidl2/source/build/pidl/ndr.pm 2005-05-19 19:57:47 UTC (rev 6912)
@@ -76,6 +76,8 @@
NO_METADATA => (is_inline_array($e) or is_fixed_array($e)),
IS_INLINE => is_inline_array($e)
});
+
+ $is_deferred = 0;
}
if (my $hdr_size = util::has_property($e, "subcontext")) {
Modified: branches/tmp/pidl2/source/build/pidl/ndr_parser.pm
===================================================================
--- branches/tmp/pidl2/source/build/pidl/ndr_parser.pm 2005-05-19 17:32:33 UTC (rev 6911)
+++ branches/tmp/pidl2/source/build/pidl/ndr_parser.pm 2005-05-19 19:57:47 UTC (rev 6912)
@@ -656,18 +656,31 @@
} elsif ($l->{TYPE} eq "ARRAY" and not is_scalar_array($e,$l)) {
my $length = ParseExpr($l->{LENGTH_IS}, $env);
my $counter = "cntr_$e->{NAME}_$l->{LEVEL_INDEX}";
- pidl "for ($counter = 0; $counter < $length; $counter++) {";
- indent;
+
$var_name = $var_name . "[$counter]";
unless ($l->{NO_METADATA}) {
$var_name = get_pointer_to($var_name);
}
+
+ # primitives if $primitives or IS_DEFERRED
+ if ($primitives or $l->{IS_DEFERRED}) {
+ pidl "for ($counter = 0; $counter < $length; $counter++) {";
+ indent;
+ ParseElementPushLevel($e, GetNextLevel($e, $l), $ndr, $var_name, $env, 1, 0);
+
+ deindent;
+ pidl "}";
+ }
- ParseElementPushLevel($e, GetNextLevel($e, $l), $ndr, $var_name, $env, $primitives, $deferred);
-
- deindent;
- pidl "}";
+ if ($deferred and ($l->{CONTAINS_DEFERRED} or $l->{IS_DEFERRED})) {
+ pidl "for ($counter = 0; $counter < $length; $counter++) {";
+ indent;
+ ParseElementPushLevel($e, GetNextLevel($e, $l), $ndr, $var_name, $env, 0, 1);
+
+ deindent;
+ pidl "}";
+ }
}
}
@@ -1018,15 +1031,28 @@
} elsif ($l->{TYPE} eq "ARRAY" and not is_scalar_array($e,$l)) {
my $length = ParseExpr($l->{LENGTH_IS}, $env);
my $counter = "cntr_$e->{NAME}_$l->{LEVEL_INDEX}";
- pidl "for ($counter = 0; $counter < $length; $counter++) {";
- indent;
+
$var_name = $var_name . "[$counter]";
unless ($l->{NO_METADATA}) {
$var_name = get_pointer_to($var_name);
}
- ParseElementPullLevel($e,GetNextLevel($e,$l), $ndr, $var_name, $env, $primitives, $deferred);
- deindent;
- pidl "}";
+
+ if ($primitives or $l->{IS_DEFERRED}) {
+
+ pidl "for ($counter = 0; $counter < $length; $counter++) {";
+ indent;
+ ParseElementPullLevel($e,GetNextLevel($e,$l), $ndr, $var_name, $env, 1, 0);
+ deindent;
+ pidl "}";
+ }
+
+ if ($deferred and ($l->{CONTAINS_DEFERRED} or $l->{IS_DEFERRED})) {
+ pidl "for ($counter = 0; $counter < $length; $counter++) {";
+ indent;
+ ParseElementPullLevel($e,GetNextLevel($e,$l), $ndr, $var_name, $env, 0, 1);
+ deindent;
+ pidl "}";
+ }
}
}
More information about the samba-cvs
mailing list