my($element) = shift;
pidl tabs();
- HeaderType($element, $element->{TYPE}, "");
- pidl " ";
- my $numstar = $element->{POINTERS};
- if ($numstar >= 1) {
- $numstar-- if Parse::Pidl::Typelist::scalar_is_reference($element->{TYPE});
- }
- foreach (@{$element->{ARRAY_LEN}})
- {
- next if is_constant($_) and
- not has_property($element, "charset");
- $numstar++;
+ if (has_property($element, "represent_as")) {
+ pidl mapType($element->{PROPERTIES}->{represent_as})." ";
+ } else {
+ HeaderType($element, $element->{TYPE}, "");
+ pidl " ";
+ my $numstar = $element->{POINTERS};
+ if ($numstar >= 1) {
+ $numstar-- if Parse::Pidl::Typelist::scalar_is_reference($element->{TYPE});
+ }
+ foreach (@{$element->{ARRAY_LEN}})
+ {
+ next if is_constant($_) and
+ not has_property($element, "charset");
+ $numstar++;
+ }
+ pidl "*" foreach (1..$numstar);
}
- pidl "*" foreach (1..$numstar);
pidl $element->{NAME};
foreach (@{$element->{ARRAY_LEN}}) {
next unless (is_constant($_) and
$tab_depth++;
my $el_count=0;
if (defined $struct->{ELEMENTS}) {
- foreach my $e (@{$struct->{ELEMENTS}}) {
- HeaderElement($e);
+ foreach (@{$struct->{ELEMENTS}}) {
+ HeaderElement($_);
$el_count++;
}
}
{
my($fn,$prop) = @_;
- foreach my $e (@{$fn->{ELEMENTS}}) {
- if (has_property($e, $prop)) {
- HeaderElement($e);
- }
+ foreach (@{$fn->{ELEMENTS}}) {
+ HeaderElement($_) if (has_property($_, $prop));
}
}
my $var_name = $var_prefix.$e->{NAME};
- $var_name = append_prefix($e, $var_name);
-
return unless $primitives or ($deferred and ContainsDeferred($e, $e->{LEVELS}[0]));
# Representation type is different from transmit_as
indent;
my $transmit_name = "_transmit_$e->{NAME}";
pidl mapType($e->{TYPE}) ." $transmit_name;";
- pidl "NDR_CHECK(ndr_$e->{REPRESENTATION_TYPE}_to_$e->{TYPE}($var_name, $transmit_name));";
+ pidl "NDR_CHECK(ndr_$e->{REPRESENTATION_TYPE}_to_$e->{TYPE}($var_name, " . get_pointer_to($transmit_name) . "));";
$var_name = $transmit_name;
}
+ $var_name = append_prefix($e, $var_name);
+
start_flags($e);
if (my $value = has_property($e, "value")) {
my $var_name = $var_prefix.$e->{NAME};
my $represent_name;
+ my $transmit_name;
return unless $primitives or ($deferred and ContainsDeferred($e, $e->{LEVELS}[0]));
pidl "{";
indent;
$represent_name = $var_name;
- $var_name = "_transmit_$e->{NAME}";
+ $transmit_name = "_transmit_$e->{NAME}";
+ $var_name = $transmit_name;
pidl mapType($e->{TYPE})." $var_name;";
}
# Representation type is different from transmit_as
if ($e->{REPRESENTATION_TYPE}) {
- pidl "NDR_CHECK(ndr_$e->{TYPE}_to_$e->{REPRESENTATION_TYPE}($var_name, $represent_name));";
+ pidl "NDR_CHECK(ndr_$e->{TYPE}_to_$e->{REPRESENTATION_TYPE}($transmit_name, ".get_pointer_to($represent_name)."));";
deindent;
pidl "}";
}
use lib "$RealBin";
use Util qw(test_samba4_ndr);
-SKIP: {
- skip "represent_as() is not finished yet", 8;
-
test_samba4_ndr('represent_as-simple',
'
- void bla([in,represent_as(foo)] uint8 x);
+ void bla([in,represent_as(uint32)] uint8 x);
',
'
uint8_t expected[] = { 0x0D };
if (NT_STATUS_IS_ERR(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
- if (r != 13)
+ if (r.in.x != 13)
return 2;
',
'
#include <core/nterr.h>
-typedef int foo;
-NTSTATUS ndr_uint8_to_foo(uint8_t from, foo *to)
+NTSTATUS ndr_uint8_to_uint32(uint8_t from, uint32_t *to)
{
*to = from;
return NT_STATUS_OK;
}
-NTSTATUS ndr_foo_to_uint8(foo from, uint8_t *to)
+NTSTATUS ndr_uint32_to_uint8(uint32_t from, uint8_t *to)
{
*to = from;
return NT_STATUS_OK;
}
'
);
-
-}