summaryrefslogtreecommitdiff
path: root/source4/build/pidl/ndr_parser.pm
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2005-05-30 00:19:58 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:17:14 -0500
commit89a17e60a14783e8560d3babc8a9a328adc3c94c (patch)
tree7aaa93cd78bb26f76618eab8cf79a04e1fc28633 /source4/build/pidl/ndr_parser.pm
parent4f1a5b716972bc2af916a528399c9dc0c2f18c35 (diff)
downloadsamba-89a17e60a14783e8560d3babc8a9a328adc3c94c.tar.gz
samba-89a17e60a14783e8560d3babc8a9a328adc3c94c.tar.bz2
samba-89a17e60a14783e8560d3babc8a9a328adc3c94c.zip
r7084: - readd the work from rev 6516,6517,6572
- use a single list of scalars - let "string" not be so special anymore - fix support for "string_array" metze (This used to be commit e1fa7ae6c8420dc582578e084b9c0d641bcfbd73)
Diffstat (limited to 'source4/build/pidl/ndr_parser.pm')
-rw-r--r--source4/build/pidl/ndr_parser.pm18
1 files changed, 8 insertions, 10 deletions
diff --git a/source4/build/pidl/ndr_parser.pm b/source4/build/pidl/ndr_parser.pm
index be663269f8..a73675159b 100644
--- a/source4/build/pidl/ndr_parser.pm
+++ b/source4/build/pidl/ndr_parser.pm
@@ -33,11 +33,10 @@ sub append_prefix($$)
if (($pointers == 0) and
(not $l->{IS_FIXED}) and
(not $l->{IS_INLINE})) {
- return get_value_of($var_name)
+ return get_value_of($var_name);
}
} elsif ($l->{TYPE} eq "DATA") {
- if ($l->{DATA_TYPE} eq "string" or
- $l->{DATA_TYPE} eq "nbt_string") {
+ if (typelist::scalar_is_reference($l->{DATA_TYPE})) {
return get_value_of($var_name) unless ($pointers);
}
}
@@ -63,7 +62,7 @@ sub is_scalar_array($$)
my $nl = Ndr::GetNextLevel($e,$l);
return (($nl->{TYPE} eq "DATA") and
- (Ndr::is_scalar_type($nl->{DATA_TYPE})));
+ (typelist::is_scalar($nl->{DATA_TYPE})));
}
sub get_pointer_to($)
@@ -776,7 +775,7 @@ sub ParseElementPrint($$$)
unless ($l->{NO_METADATA}){ $var_name = get_pointer_to($var_name); }
} elsif ($l->{TYPE} eq "DATA") {
- if (not Ndr::is_scalar_type($l->{DATA_TYPE})) {
+ if (not typelist::is_scalar($l->{DATA_TYPE}) or typelist::scalar_is_reference($l->{DATA_TYPE})) {
$var_name = get_pointer_to($var_name);
}
pidl "ndr_print_$l->{DATA_TYPE}(ndr, \"$e->{NAME}\", $var_name);";
@@ -849,13 +848,12 @@ sub ParseDataPull($$$$$)
my $var_name = shift;
my $ndr_flags = shift;
- $var_name = get_pointer_to($var_name);
-
- if ($l->{DATA_TYPE} eq "string" or
- $l->{DATA_TYPE} eq "nbt_string") {
+ if (typelist::scalar_is_reference($l->{DATA_TYPE})) {
$var_name = get_pointer_to($var_name);
}
+ $var_name = get_pointer_to($var_name);
+
pidl "NDR_CHECK(ndr_pull_$l->{DATA_TYPE}($ndr, $ndr_flags, $var_name));";
if (my $range = util::has_property($e, "range")) {
@@ -876,7 +874,7 @@ sub ParseDataPush($$$$$)
my $ndr_flags = shift;
# strings are passed by value rather then reference
- if (not Ndr::is_scalar_type($l->{DATA_TYPE})) {
+ if (not typelist::is_scalar($l->{DATA_TYPE}) or typelist::scalar_is_reference($l->{DATA_TYPE})) {
$var_name = get_pointer_to($var_name);
}