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