svn commit: samba r10739 - in branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3: .

jelmer at samba.org jelmer at samba.org
Wed Oct 5 19:53:43 GMT 2005


Author: jelmer
Date: 2005-10-05 19:53:41 +0000 (Wed, 05 Oct 2005)
New Revision: 10739

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10739

Log:
Reduce number of calls to prs_align_custom()

Modified:
   branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Parser.pm
   branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Types.pm


Changeset:
Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Parser.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Parser.pm	2005-10-05 19:51:35 UTC (rev 10738)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Parser.pm	2005-10-05 19:53:41 UTC (rev 10739)
@@ -71,15 +71,8 @@
 {
 	my ($e,$l,$nl,$env,$varname,$what,$align) = @_;
 
-	my @args = ($e,$l,$varname,$what);
+	my @args = ($e,$l,$varname,$what,$align);
 
-	if (defined($e->{ALIGN})) {
-		Align($align, $e->{ALIGN});
-	} else {
-		# Default to 4
-		Align($align, 4);
-	}
-
 	# See if we need to add a level argument because we're parsing a union
 	foreach (@{$e->{LEVELS}}) {
 		push (@args, ParseExpr("level_$e->{NAME}", $env)) 
@@ -89,6 +82,13 @@
 	my $c = DissectType(@args);
 	return if not $c;
 
+	if (defined($e->{ALIGN})) {
+		Align($align, $e->{ALIGN});
+	} else {
+		# Default to 4
+		Align($align, 4);
+	}
+
 	pidl "if (!$c)";
 	pidl "\treturn False;";
 }
@@ -300,13 +300,15 @@
 	pidl "prs_debug(ps, depth, desc, \"$pfn\");";
 	pidl "depth++;";
 
+	my $align = 8;
 	if ($s->{SURROUNDING_ELEMENT}) {
 		pidl "if (!prs_uint32(\"size_$s->{SURROUNDING_ELEMENT}->{NAME}\", ps, depth, &" . ParseExpr("size_$s->{SURROUNDING_ELEMENT}->{NAME}", $env) . "))";
 		pidl "\treturn False;";
 		pidl "";
+		$align = 4;
+		
 	}
 
-	my $align = 0;
 	foreach (@{$s->{ELEMENTS}}) {
 		ParseElement($_, $env, PRIMITIVES, \$align); 
 		pidl "";
@@ -393,7 +395,7 @@
 		if ($_->{TYPE} ne "EMPTY") {
 			pidl "depth++;";
 			my $env = UnionGenerateEnvElement($_);
-			my $align = 0;
+			my $align = 8;
 			ParseElement($_, $env, PRIMITIVES, \$align); 
 			pidl "depth--;";
 		}

Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Types.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Types.pm	2005-10-05 19:51:35 UTC (rev 10738)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Types.pm	2005-10-05 19:53:41 UTC (rev 10739)
@@ -27,9 +27,9 @@
 	return "$n = $v;";
 }
 
-sub dissect_scalar($$$)
+sub dissect_scalar($$$$$)
 {
-	my ($e,$l,$n) = @_;
+	my ($e,$l,$n,$w,$a) = @_;
 
 	my $t = lc($e->{TYPE});
 	
@@ -94,12 +94,13 @@
 	return "init_$t(&$n, $v, $flags);";
 }
 
-sub dissect_string($$$)
+sub dissect_string($$$$$)
 {
-	my ($e,$l,$n) = @_;
+	my ($e,$l,$n,$w,$a) = @_;
 
 	my $t = lc(decl_string($e));
 
+	$$a = 1;
 	return "smb_io_$t(\"$e->{NAME}\", &$n, 1, ps, depth)";
 }
 
@@ -162,7 +163,7 @@
 		DECL => "NTTIME",
 		INIT => "",
 		DISSECT_P => sub { 
-			my ($e,$l,$n) = @_; 
+			my ($e,$l,$n,$w,$a) = @_; 
 			return "smb_io_nttime(\"$e->{NAME}\", &n, ps, depth)"; 
 		}
 	},
@@ -171,7 +172,7 @@
 		DECL => "DOM_SID",
 		INIT => "",
 		DISSECT_P => sub {
-			my ($e,$l,$n) = @_;
+			my ($e,$l,$n,$w,$a) = @_;
 			return "smb_io_dom_sid(\"$e->{NAME}\", &n, ps, depth)";
 		}
 	},
@@ -180,7 +181,7 @@
 		DECL => "POLICY_HND",
 		INIT => "",
 		DISSECT_P => sub {
-			my ($e,$l,$n) = @_;
+			my ($e,$l,$n,$w,$a) = @_;
 			return "smb_io_pol_hnd(\"$e->{NAME}\", &n, ps, depth)";
 		}
 	},
@@ -189,7 +190,7 @@
 		DECL => "uint64",
 		INIT => "",
 		DISSECT_P => sub {
-			my ($e,$l,$n) = @_;
+			my ($e,$l,$n,$w,$a) = @_;
 			return "prs_uint64(\"$e->{NAME}\", ps, depth, &$n)";
 		}
 	},
@@ -311,6 +312,7 @@
 	my $l = shift @_;
 	my $varname = shift @_;
 	my $what = shift @_;
+	my $align = shift @_;
 
 	my $t = $known_types->{$l->{DATA_TYPE}};
 
@@ -355,25 +357,25 @@
 			if ($td->{DATA}->{TYPE} eq "UNION") {
 				$decl.="_CTR";
 				 $dissect_p = sub {
-					my ($e,$l,$n,$w,$s) = @_;
+					my ($e,$l,$n,$w,$a,$s) = @_;
 
 					return "$if->{NAME}_io_$td->{NAME}_p(\"$e->{NAME}\", &$n, $s, ps, depth)";
 				};
 
 				 $dissect_d = sub {
-					my ($e,$l,$n,$w,$s) = @_;
+					my ($e,$l,$n,$w,$a,$s) = @_;
 
 					return "$if->{NAME}_io_$td->{NAME}_d(\"$e->{NAME}\", &$n, $s, ps, depth)";
 				};
 
 			} else {
 				 $dissect_p = sub {
-					my ($e,$l,$n,$w) = @_;
+					my ($e,$l,$n,$w,$a) = @_;
 
 					return "$if->{NAME}_io_$td->{NAME}_p(\"$e->{NAME}\", &$n, ps, depth)";
 				};
 			 	$dissect_d = sub {
-					my ($e,$l,$n,$w) = @_;
+					my ($e,$l,$n,$w,$a) = @_;
 
 					return "$if->{NAME}_io_$td->{NAME}_d(\"$e->{NAME}\", &$n, ps, depth)";
 				};



More information about the samba-cvs mailing list