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