Parse-Pidl
view release on metacpan or search on metacpan
lib/Parse/Pidl/Ethereal/NDR.pm view on Meta::CPAN
if (defined($conformance->{dissectorparams}->{$myname})) {
$conformance->{dissectorparams}->{$myname}->{PARAM} = 1;
$param = $conformance->{dissectorparams}->{$myname}->{PARAM};
}
if ($l->{TYPE} eq "POINTER") {
my $type;
if ($l->{LEVEL} eq "TOP") {
$type = "toplevel";
} elsif ($l->{LEVEL} eq "EMBEDDED") {
$type = "embedded";
}
pidl_code "offset = dissect_ndr_$type\_pointer(tvb, offset, pinfo, tree, drep, $myname\_, $ptrtype_mappings{$l->{POINTER_TYPE}}, \"Pointer to ".field2name(StripPrefixes($e->{NAME})) . " ($e->{TYPE})\",$hf);";
} elsif ($l->{TYPE} eq "ARRAY") {
if ($l->{IS_INLINE}) {
error($e->{ORIGINAL}, "Inline arrays not supported");
} elsif ($l->{IS_FIXED}) {
pidl_code "int i;";
pidl_code "for (i = 0; i < $l->{SIZE_IS}; i++)";
pidl_code "\toffset = $myname\_(tvb, offset, pinfo, tree, drep);";
lib/Parse/Pidl/NDR.pm view on Meta::CPAN
IS_CONFORMANT => "$is_conformant",
IS_FIXED => (not $is_conformant and Parse::Pidl::Util::is_constant($size)),
IS_INLINE => (not $is_conformant and not Parse::Pidl::Util::is_constant($size))
});
}
# Next, all the pointers
foreach my $i (1..$e->{POINTERS}) {
my $pt = pointer_type($e);
my $level = "EMBEDDED";
# Top level "ref" pointers do not have a referrent identifier
$level = "TOP" if ( defined($pt)
and $i == 1
and $e->{PARENT}->{TYPE} eq "FUNCTION");
push (@$order, {
TYPE => "POINTER",
# for now, there can only be one pointer type per element
POINTER_TYPE => pointer_type($e),
POINTER_INDEX => $pointer_idx,
lib/Parse/Pidl/Samba4/NDR/Parser.pm view on Meta::CPAN
end_flags($e);
}
#####################################################################
# parse a pointer in a struct element or function
sub ParsePtrPush($$$)
{
my ($e,$l,$var_name) = @_;
if ($l->{POINTER_TYPE} eq "ref") {
if ($l->{LEVEL} eq "EMBEDDED") {
pidl "NDR_CHECK(ndr_push_ref_ptr(ndr, $var_name));";
} else {
check_null_pointer(get_value_of($var_name));
}
} elsif ($l->{POINTER_TYPE} eq "relative") {
pidl "NDR_CHECK(ndr_push_relative_ptr1(ndr, $var_name));";
} elsif ($l->{POINTER_TYPE} eq "unique") {
pidl "NDR_CHECK(ndr_push_unique_ptr(ndr, $var_name));";
} elsif ($l->{POINTER_TYPE} eq "sptr") {
pidl "NDR_CHECK(ndr_push_sptr_ptr(ndr, $var_name));";
( run in 1.532 second using v1.01-cache-2.11-cpan-71847e10f99 )