svn commit: samba r5361 - in branches/SAMBA_4_0/source: build/pidl librpc/idl librpc/ndr

jelmer at samba.org jelmer at samba.org
Sat Feb 12 21:43:09 GMT 2005


Author: jelmer
Date: 2005-02-12 21:43:08 +0000 (Sat, 12 Feb 2005)
New Revision: 5361

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

Log:
Rename some functions, add tests to validator.

Modified:
   branches/SAMBA_4_0/source/build/pidl/ndr.pm
   branches/SAMBA_4_0/source/build/pidl/validator.pm
   branches/SAMBA_4_0/source/librpc/idl/dcom.idl
   branches/SAMBA_4_0/source/librpc/ndr/ndr_basic.c


Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/ndr.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/ndr.pm	2005-02-12 19:28:23 UTC (rev 5360)
+++ branches/SAMBA_4_0/source/build/pidl/ndr.pm	2005-02-12 21:43:08 UTC (rev 5361)
@@ -199,7 +199,7 @@
 
 ####################################################################
 # work out the name of a size_is() variable
-sub find_size_var($$$)
+sub ParseExpr($$$)
 {
 	my($e) = shift;
 	my($size) = shift;
@@ -242,7 +242,7 @@
 }
 
 #####################################################################
-# check that a variable we get from find_size_var isn't a null pointer
+# check that a variable we get from ParseExpr isn't a null pointer
 sub check_null_pointer($)
 {
 	my $size = shift;
@@ -253,7 +253,7 @@
 }
 
 #####################################################################
-# check that a variable we get from find_size_var isn't a null pointer
+# check that a variable we get from ParseExpr isn't a null pointer
 # void return varient
 sub check_null_pointer_void($)
 {
@@ -345,19 +345,23 @@
 
 	my $dt = $typedefs{$e}->{DATA};
 
+	return $dt->{ALIGN} if ($dt->{ALIGN});
+
 	if ($dt->{TYPE} eq "STRUCT") {
-		return struct_alignment($dt);
+		$dt->{ALIGN} = struct_alignment($dt);
 	} elsif($dt->{TYPE} eq "UNION") {
-		return struct_alignment($dt);
+		$dt->{ALIGN} = struct_alignment($dt);
 	} elsif ($dt->{TYPE} eq "ENUM") {
-	   	return align_type(util::enum_type_fn(util::get_enum($e)));
+	   	$dt->{ALIGN} = align_type(util::enum_type_fn(util::get_enum($e)));
 	} elsif ($dt->{TYPE} eq "BITMAP") {
-		return align_type(util::bitmap_type_fn(util::get_bitmap($e)));
-	} elsif ($dt->{TYPE} eq "SCALAR") {
-		return $dt->{ALIGN};
+		$dt->{ALIGN} = align_type(util::bitmap_type_fn(util::get_bitmap($e)));
+	} 
+
+	if (not defined($dt->{ALIGN})) {
+		die("Internal pidl error. Unable to determine alignment for data type $dt->{TYPE}!");
 	}
-
-	die("Internal pidl error. Typedef has unknown data type $dt->{TYPE}!");
+	
+	return $dt->{ALIGN};
 }
 
 #####################################################################
@@ -368,7 +372,7 @@
 	my $var_prefix = shift;
 	my $ndr_flags = shift;
 
-	my $size = find_size_var($e, util::array_size($e), $var_prefix);
+	my $size = ParseExpr($e, util::array_size($e), $var_prefix);
 
 	if (defined $e->{CONFORMANT_SIZE}) {
 		# the conformant size has already been pushed
@@ -378,7 +382,7 @@
 	}
 
 	if (my $length = util::has_property($e, "length_is")) {
-		$length = find_size_var($e, $length, $var_prefix);
+		$length = ParseExpr($e, $length, $var_prefix);
 		pidl "\t\tNDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));\n";
 		pidl "\t\tNDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, $length));\n";
 		$size = $length;
@@ -397,11 +401,11 @@
 {
 	my $e = shift;
 	my $var_prefix = shift;
-	my $size = find_size_var($e, util::array_size($e), $var_prefix);
+	my $size = ParseExpr($e, util::array_size($e), $var_prefix);
 	my $length = util::has_property($e, "length_is");
 
 	if (defined $length) {
-		$size = find_size_var($e, $length, $var_prefix);
+		$size = ParseExpr($e, $length, $var_prefix);
 	}
 
 	if (is_scalar_type($e->{TYPE})) {
@@ -420,7 +424,7 @@
 
 	if (!defined $e->{CONFORMANT_SIZE} && 
 	    util::has_property($e, "size_is")) {
-		my $size = find_size_var($e, util::array_size($e), $var_prefix);
+		my $size = ParseExpr($e, util::array_size($e), $var_prefix);
 		pidl "\tif ($var_prefix$e->{NAME}) {\n";
 		check_null_pointer($size);
 		pidl "\t\tNDR_CHECK(ndr_check_array_size(ndr, (void*)&$var_prefix$e->{NAME}, $size));\n";
@@ -428,7 +432,7 @@
 	}
 
 	if (my $length = util::has_property($e, "length_is")) {
-		$length = find_size_var($e, $length, $var_prefix);
+		$length = ParseExpr($e, $length, $var_prefix);
 		pidl "\tif ($var_prefix$e->{NAME}) {\n";
 		check_null_pointer($length);
 		pidl "\t\tNDR_CHECK(ndr_check_array_length(ndr, (void*)&$var_prefix$e->{NAME}, $length));\n";
@@ -445,7 +449,7 @@
 	my $var_prefix = shift;
 	my $ndr_flags = shift;
 
-	my $size = find_size_var($e, util::array_size($e), $var_prefix);
+	my $size = ParseExpr($e, util::array_size($e), $var_prefix);
 	my $alloc_size = $size;
 
 	# if this is a conformant array then we use that size to allocate, and make sure
@@ -571,7 +575,7 @@
 	my($var_prefix) = shift;
 	my($ndr_flags) = shift;
 	my $switch = shift;
-	my $switch_var = find_size_var($e, $switch, $var_prefix);
+	my $switch_var = ParseExpr($e, $switch, $var_prefix);
 
 	my $cprefix = c_pull_prefix($e);
 
@@ -624,7 +628,7 @@
 	my($var_prefix) = shift;
 	my($ndr_flags) = shift;
 	my $switch = shift;
-	my $switch_var = find_size_var($e, $switch, $var_prefix);
+	my $switch_var = ParseExpr($e, $switch, $var_prefix);
 	my $cprefix = c_push_prefix($e);
 
 	check_null_pointer($switch_var);
@@ -655,7 +659,7 @@
 	my($e) = shift;
 	my($var_prefix) = shift;
 	my $switch = shift;
-	my $switch_var = find_size_var($e, $switch, $var_prefix);
+	my $switch_var = ParseExpr($e, $switch, $var_prefix);
 	my $cprefix = c_push_prefix($e);
 
 	check_null_pointer_void($switch_var);
@@ -856,7 +860,7 @@
 	# alignment)
 	my $e = $struct->{ELEMENTS}[-1];
 	if (defined $e->{ARRAY_LEN} && $e->{ARRAY_LEN} eq "*") {
-		my $size = find_size_var($e, util::array_size($e), "r->");
+		my $size = ParseExpr($e, util::array_size($e), "r->");
 		$e->{CONFORMANT_SIZE} = $size;
 		check_null_pointer($size);
 		pidl "\tNDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, $size));\n";
@@ -1673,7 +1677,7 @@
 	}
 
 	# its an array
-	my $size = find_size_var($e, $asize, "r->out.");
+	my $size = ParseExpr($e, $asize, "r->out.");
 	check_null_pointer($size);
 	pidl "\tNDR_ALLOC_N(ndr, r->out.$e->{NAME}, $size);\n";
 	if (util::has_property($e, "in")) {

Modified: branches/SAMBA_4_0/source/build/pidl/validator.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/validator.pm	2005-02-12 19:28:23 UTC (rev 5360)
+++ branches/SAMBA_4_0/source/build/pidl/validator.pm	2005-02-12 21:43:08 UTC (rev 5361)
@@ -47,6 +47,17 @@
 	if ($e->{POINTERS} && $e->{ARRAY_LEN}) {
 		fatal(el_name($e) . " : pidl cannot handle pointers to arrays. Use a substructure instead\n");
 	}
+	
+	if (util::has_property($e, "ptr")) {
+		fatal(el_name($e) . " : pidl does not support full NDR pointers yet\n");
+	}
+	
+	if (!$e->{POINTERS} && (
+		util::has_property($e, "ptr") or
+		util::has_property($e, "unique") or
+		util::has_property($e, "ref"))) {
+		fatal(el_name($e) . " : pointer properties on non-pointer element\n");	
+	}
 }
 
 #####################################################################

Modified: branches/SAMBA_4_0/source/librpc/idl/dcom.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/dcom.idl	2005-02-12 19:28:23 UTC (rev 5360)
+++ branches/SAMBA_4_0/source/librpc/idl/dcom.idl	2005-02-12 21:43:08 UTC (rev 5361)
@@ -79,7 +79,7 @@
 		uint32 size; /* Num extents. */
 		uint32 reserved; /* Must be zero. */
 		/*FIXME[size_is((size+1)&~1,), unique] ORPC_EXTENT **extent; extents */
-		[size_is(size),unique] ORPC_EXTENT extent[];
+		[size_is(size)] ORPC_EXTENT extent[];
 	} ORPC_EXTENT_ARRAY;
 
 

Modified: branches/SAMBA_4_0/source/librpc/ndr/ndr_basic.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/ndr/ndr_basic.c	2005-02-12 19:28:23 UTC (rev 5360)
+++ branches/SAMBA_4_0/source/librpc/ndr/ndr_basic.c	2005-02-12 21:43:08 UTC (rev 5361)
@@ -106,7 +106,7 @@
 }
 
 /*
-  parse a pointer
+  parse a pointer referent identifier
 */
 NTSTATUS ndr_pull_ptr(struct ndr_pull *ndr, uint32_t *v)
 {



More information about the samba-cvs mailing list