From 8973ac8a393f9df64ea37de79397161815e1ce2c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 24 Mar 2006 14:13:02 +0000 Subject: r14691: Fix printing elements with represent_as set (This used to be commit f4428db2f922e921c54cdb0849eaad5018cb5a01) --- source4/pidl/lib/Parse/Pidl/NDR.pm | 4 ++++ source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm | 17 ++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) (limited to 'source4/pidl/lib/Parse') diff --git a/source4/pidl/lib/Parse/Pidl/NDR.pm b/source4/pidl/lib/Parse/Pidl/NDR.pm index 1d5059bfb5..c8a9717889 100644 --- a/source4/pidl/lib/Parse/Pidl/NDR.pm +++ b/source4/pidl/lib/Parse/Pidl/NDR.pm @@ -917,6 +917,10 @@ sub ValidElement($) fatal($e, el_name($e) . " : represent_as() and transmit_as() can not be used on the same element"); } + if (has_property($e, "represent_as") and has_property($e, "value")) { + fatal($e, el_name($e) . " : represent_as() and value() can not be used on the same element"); + } + if (defined (has_property($e, "subcontext_size")) and not defined(has_property($e, "subcontext"))) { fatal($e, el_name($e) . " : subcontext_size() on non-subcontext element"); } diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm index d9666a20fe..e3058665f2 100644 --- a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm +++ b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm @@ -729,9 +729,15 @@ sub ParseElementPrint($$$) { my($e,$var_name,$env) = @_; - $var_name = append_prefix($e, $var_name); return if (has_property($e, "noprint")); + if ($e->{REPRESENTATION_TYPE}) { + pidl "ndr_print_$e->{REPRESENTATION_TYPE}(ndr, \"$e->{NAME}\", $var_name);"; + return; + } + + $var_name = append_prefix($e, $var_name); + if (my $value = has_property($e, "value")) { $var_name = "(ndr->flags & LIBNDR_PRINT_SET_VALUES)?" . ParseExpr($value,$env) . ":$var_name"; } @@ -1411,18 +1417,15 @@ sub ParseStructPrint($$) EnvSubstituteValue($env, $struct); - foreach my $e (@{$struct->{ELEMENTS}}) { - DeclareArrayVariables($e); - } + DeclareArrayVariables($_) foreach (@{$struct->{ELEMENTS}}); pidl "ndr_print_struct(ndr, name, \"$name\");"; start_flags($struct); pidl "ndr->depth++;"; - foreach my $e (@{$struct->{ELEMENTS}}) { - ParseElementPrint($e, "r->$e->{NAME}", $env); - } + + ParseElementPrint($_, "r->$_->{NAME}", $env) foreach (@{$struct->{ELEMENTS}}); pidl "ndr->depth--;"; end_flags($struct); -- cgit