svn commit: samba r5417 - in branches/SAMBA_4_0/source/build/pidl: .

jelmer at samba.org jelmer at samba.org
Wed Feb 16 11:09:10 GMT 2005


Author: jelmer
Date: 2005-02-16 11:09:10 +0000 (Wed, 16 Feb 2005)
New Revision: 5417

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

Log:
Add wrapper function for typedefs hash rather then using the "our" keyword, 
move pointer parsing to seperate function.

Modified:
   branches/SAMBA_4_0/source/build/pidl/dump.pm
   branches/SAMBA_4_0/source/build/pidl/header.pm
   branches/SAMBA_4_0/source/build/pidl/ndr.pm


Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/dump.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/dump.pm	2005-02-16 10:10:47 UTC (rev 5416)
+++ branches/SAMBA_4_0/source/build/pidl/dump.pm	2005-02-16 11:09:10 UTC (rev 5417)
@@ -47,10 +47,8 @@
 	($res .= DumpProperties($element->{PROPERTIES}));
     $res .= DumpType($element->{TYPE});
     $res .= " ";
-    if ($element->{POINTERS}) {
-	for (my($i)=0; $i < $element->{POINTERS}; $i++) {
+	for my $i (1..$element->{POINTERS}) {
 	    $res .= "*";
-	}
     }
     $res .= "$element->{NAME}";
     (defined $element->{ARRAY_LEN}) && ($res .= "[$element->{ARRAY_LEN}]");

Modified: branches/SAMBA_4_0/source/build/pidl/header.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/header.pm	2005-02-16 10:10:47 UTC (rev 5416)
+++ branches/SAMBA_4_0/source/build/pidl/header.pm	2005-02-16 11:09:10 UTC (rev 5417)
@@ -185,7 +185,10 @@
 		return;
 	}
 
-	my $dt = $NdrParser::typedefs{$e->{TYPE}}->{DATA};
+	my $dt;
+	if (my $t = NdrParser::get_typedef($e->{TYPE})) {
+		$dt = $t->{DATA};
+	}
 
 	if ($data =~ "string") {
 		pidl "const char *";

Modified: branches/SAMBA_4_0/source/build/pidl/ndr.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/ndr.pm	2005-02-16 10:10:47 UTC (rev 5416)
+++ branches/SAMBA_4_0/source/build/pidl/ndr.pm	2005-02-16 11:09:10 UTC (rev 5417)
@@ -11,9 +11,15 @@
 use needed;
 
 # list of known types
-our %typedefs;
-our %typefamily;
+my %typedefs;
+my %typefamily;
 
+sub get_typedef($)
+{
+	my $n = shift;
+	return $typedefs{$n};
+}
+
 sub RegisterPrimitives()
 {
 	my %type_alignments = 
@@ -534,7 +540,7 @@
 	} elsif (util::is_inline_array($e)) {
 		ParseArrayPush($e, "r->", "NDR_SCALARS");
 	} elsif (need_wire_pointer($e)) {
-		pidl "NDR_CHECK(ndr_push_unique_ptr(ndr, $var_prefix$e->{NAME}));";
+		ParseElementPushPtr($e, $var_prefix, $ndr_flags);
 	} elsif (need_alloc($e)) {
 		# no scalar component
 	} elsif (my $switch = util::has_property($e, "switch_is")) {
@@ -549,6 +555,18 @@
 }
 
 #####################################################################
+# parse a pointer in a struct element or function
+sub ParseElementPushPtr($$$)
+{
+	my $e = shift;
+	my $var_prefix = shift;
+	my $ndr_flags = shift;
+
+	pidl "NDR_CHECK(ndr_push_unique_ptr(ndr, $var_prefix$e->{NAME}));";
+}
+
+
+#####################################################################
 # print scalars in a structure element
 sub ParseElementPrintScalar($$)
 {
@@ -710,19 +728,7 @@
 	if (util::is_inline_array($e)) {
 		ParseArrayPull($e, "r->", "NDR_SCALARS");
 	} elsif (need_wire_pointer($e)) {
-		pidl "NDR_CHECK(ndr_pull_unique_ptr(ndr, &_ptr_$e->{NAME}));";
-		pidl "if (_ptr_$e->{NAME}) {";
-		indent;
-		pidl "NDR_ALLOC(ndr, $var_prefix$e->{NAME});";
-		if (util::has_property($e, "relative")) {
-			pidl "NDR_CHECK(ndr_pull_relative_ptr1(ndr, $var_prefix$e->{NAME}, _ptr_$e->{NAME}));";
-		}
-		deindent;
-		pidl "} else {";
-		indent;
-		pidl "$var_prefix$e->{NAME} = NULL;";
-		deindent;
-		pidl "}";
+		ParseElementPullPtr($e, $var_prefix, $ndr_flags);
 	} elsif (need_alloc($e)) {
 		# no scalar component
 	} elsif (my $switch = util::has_property($e, "switch_is")) {
@@ -735,9 +741,7 @@
 	if (my $range = util::has_property($e, "range")) {
 		my ($low, $high) = split(/ /, $range, 2);
 		pidl "if ($var_prefix$e->{NAME} < $low || $var_prefix$e->{NAME} > $high) {";
-		indent;
-		pidl "return ndr_pull_error(ndr, NDR_ERR_RANGE, \"value out of range\");";
-		deindent;
+		pidl "\treturn ndr_pull_error(ndr, NDR_ERR_RANGE, \"value out of range\");";
 		pidl "}";
 	}
 
@@ -745,6 +749,27 @@
 }
 
 #####################################################################
+# parse a pointer in a struct element or function
+sub ParseElementPullPtr($$$)
+{
+	my($e) = shift;
+	my($var_prefix) = shift;
+	my($ndr_flags) = shift;
+
+	pidl "NDR_CHECK(ndr_pull_unique_ptr(ndr, &_ptr_$e->{NAME}));";
+	pidl "if (_ptr_$e->{NAME}) {";
+	indent;
+	pidl "NDR_ALLOC(ndr, $var_prefix$e->{NAME});";
+	if (util::has_property($e, "relative")) {
+		pidl "NDR_CHECK(ndr_pull_relative_ptr1(ndr, $var_prefix$e->{NAME}, _ptr_$e->{NAME}));";
+	}
+	deindent;
+	pidl "} else {";
+	pidl "\t$var_prefix$e->{NAME} = NULL;";
+	pidl "}";
+}
+
+#####################################################################
 # parse buffers in a structure element
 sub ParseElementPushBuffer($$$)
 {



More information about the samba-cvs mailing list