svn commit: samba r14690 - in branches/SAMBA_4_0/source/pidl: lib/Parse/Pidl/Samba4 lib/Parse/Pidl/Samba4/NDR tests

jelmer at samba.org jelmer at samba.org
Fri Mar 24 12:40:08 GMT 2006


Author: jelmer
Date: 2006-03-24 12:40:07 +0000 (Fri, 24 Mar 2006)
New Revision: 14690

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

Log:
Support represent_as in headers, enable represent_as() test (which works now)

Modified:
   branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/Header.pm
   branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
   branches/SAMBA_4_0/source/pidl/tests/ndr_represent.pl


Changeset:
Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/Header.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/Header.pm	2006-03-24 11:45:40 UTC (rev 14689)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/Header.pm	2006-03-24 12:40:07 UTC (rev 14690)
@@ -55,19 +55,23 @@
 	my($element) = shift;
 
 	pidl tabs();
-	HeaderType($element, $element->{TYPE}, "");
-	pidl " ";
-	my $numstar = $element->{POINTERS};
-	if ($numstar >= 1) {
-		$numstar-- if Parse::Pidl::Typelist::scalar_is_reference($element->{TYPE});
+	if (has_property($element, "represent_as")) {
+		pidl mapType($element->{PROPERTIES}->{represent_as})." ";
+	} else {
+		HeaderType($element, $element->{TYPE}, "");
+		pidl " ";
+		my $numstar = $element->{POINTERS};
+		if ($numstar >= 1) {
+			$numstar-- if Parse::Pidl::Typelist::scalar_is_reference($element->{TYPE});
+		}
+		foreach (@{$element->{ARRAY_LEN}})
+		{
+			next if is_constant($_) and 
+				not has_property($element, "charset");
+			$numstar++;
+		}
+		pidl "*" foreach (1..$numstar);
 	}
-	foreach (@{$element->{ARRAY_LEN}})
-	{
-		next if is_constant($_) and 
-			not has_property($element, "charset");
-		$numstar++;
-	}
-	pidl "*" foreach (1..$numstar);
 	pidl $element->{NAME};
 	foreach (@{$element->{ARRAY_LEN}}) {
 		next unless (is_constant($_) and 
@@ -91,8 +95,8 @@
     $tab_depth++;
     my $el_count=0;
     if (defined $struct->{ELEMENTS}) {
-		foreach my $e (@{$struct->{ELEMENTS}}) {
-		    HeaderElement($e);
+		foreach (@{$struct->{ELEMENTS}}) {
+		    HeaderElement($_);
 		    $el_count++;
 		}
     }
@@ -237,10 +241,8 @@
 {
     my($fn,$prop) = @_;
 
-    foreach my $e (@{$fn->{ELEMENTS}}) {
-	    if (has_property($e, $prop)) {
-		    HeaderElement($e);
-	    }
+    foreach (@{$fn->{ELEMENTS}}) {
+		HeaderElement($_) if (has_property($_, $prop));
     }
 }
 

Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm	2006-03-24 11:45:40 UTC (rev 14689)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm	2006-03-24 12:40:07 UTC (rev 14690)
@@ -670,8 +670,6 @@
 
 	my $var_name = $var_prefix.$e->{NAME};
 
-	$var_name = append_prefix($e, $var_name);
-
 	return unless $primitives or ($deferred and ContainsDeferred($e, $e->{LEVELS}[0]));
 
 	# Representation type is different from transmit_as
@@ -680,10 +678,12 @@
 		indent;
 		my $transmit_name = "_transmit_$e->{NAME}";
 		pidl mapType($e->{TYPE}) ." $transmit_name;";
-		pidl "NDR_CHECK(ndr_$e->{REPRESENTATION_TYPE}_to_$e->{TYPE}($var_name, $transmit_name));";
+		pidl "NDR_CHECK(ndr_$e->{REPRESENTATION_TYPE}_to_$e->{TYPE}($var_name, " . get_pointer_to($transmit_name) . "));";
 		$var_name = $transmit_name;
 	}
 
+	$var_name = append_prefix($e, $var_name);
+
 	start_flags($e);
 
 	if (my $value = has_property($e, "value")) {
@@ -1073,6 +1073,7 @@
 
 	my $var_name = $var_prefix.$e->{NAME};
 	my $represent_name;
+	my $transmit_name;
 
 	return unless $primitives or ($deferred and ContainsDeferred($e, $e->{LEVELS}[0]));
 
@@ -1080,7 +1081,8 @@
 		pidl "{";
 		indent;
 		$represent_name = $var_name;
-		$var_name = "_transmit_$e->{NAME}";
+		$transmit_name = "_transmit_$e->{NAME}";
+		$var_name = $transmit_name;
 		pidl mapType($e->{TYPE})." $var_name;";
 	}
 
@@ -1094,7 +1096,7 @@
 
 	# Representation type is different from transmit_as
 	if ($e->{REPRESENTATION_TYPE}) {
-		pidl "NDR_CHECK(ndr_$e->{TYPE}_to_$e->{REPRESENTATION_TYPE}($var_name, $represent_name));";
+		pidl "NDR_CHECK(ndr_$e->{TYPE}_to_$e->{REPRESENTATION_TYPE}($transmit_name, ".get_pointer_to($represent_name)."));";
 		deindent;
 		pidl "}";
 	}

Modified: branches/SAMBA_4_0/source/pidl/tests/ndr_represent.pl
===================================================================
--- branches/SAMBA_4_0/source/pidl/tests/ndr_represent.pl	2006-03-24 11:45:40 UTC (rev 14689)
+++ branches/SAMBA_4_0/source/pidl/tests/ndr_represent.pl	2006-03-24 12:40:07 UTC (rev 14690)
@@ -9,12 +9,9 @@
 use lib "$RealBin";
 use Util qw(test_samba4_ndr);
 
-SKIP: {
-	skip "represent_as() is not finished yet", 8;
-
 test_samba4_ndr('represent_as-simple', 
 '
-	void bla([in,represent_as(foo)] uint8 x);
+	void bla([in,represent_as(uint32)] uint8 x);
 ',
 '
 	uint8_t expected[] = { 0x0D };
@@ -25,25 +22,22 @@
 	if (NT_STATUS_IS_ERR(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
 		return 1;
 
-	if (r != 13)
+	if (r.in.x != 13)
 		return 2;
 ',
 '
 #include <core/nterr.h>
-typedef int foo;
 
-NTSTATUS ndr_uint8_to_foo(uint8_t from, foo *to)
+NTSTATUS ndr_uint8_to_uint32(uint8_t from, uint32_t *to)
 {
 	*to = from;
 	return NT_STATUS_OK;
 }
 
-NTSTATUS ndr_foo_to_uint8(foo from, uint8_t *to)
+NTSTATUS ndr_uint32_to_uint8(uint32_t from, uint8_t *to)
 {
 	*to = from;
 	return NT_STATUS_OK;
 }
 '
 );
-
-}



More information about the samba-cvs mailing list