diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2005-10-06 11:57:25 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:39:28 -0500 |
commit | 093a30d7ed86e0772d1f590b25b74969b5c0b0ff (patch) | |
tree | 93e8f5850db575ba1c2133c382a18492b8cf939c /source4/pidl/lib | |
parent | 39daa629ff74b1a16a2c53ba82628fdabd4d1a93 (diff) | |
download | samba-093a30d7ed86e0772d1f590b25b74969b5c0b0ff.tar.gz samba-093a30d7ed86e0772d1f590b25b74969b5c0b0ff.tar.bz2 samba-093a30d7ed86e0772d1f590b25b74969b5c0b0ff.zip |
r10765: Actually use VALS() setting for enums
(This used to be commit 6b33e3eedd13ade5c7c9f4b5062e8b8f919fe39c)
Diffstat (limited to 'source4/pidl/lib')
-rw-r--r-- | source4/pidl/lib/Parse/Pidl/Ethereal/NDR.pm | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/source4/pidl/lib/Parse/Pidl/Ethereal/NDR.pm b/source4/pidl/lib/Parse/Pidl/Ethereal/NDR.pm index e7a6b80b7b..be542638ef 100644 --- a/source4/pidl/lib/Parse/Pidl/Ethereal/NDR.pm +++ b/source4/pidl/lib/Parse/Pidl/Ethereal/NDR.pm @@ -31,24 +31,6 @@ my %ptrtype_mappings = ( "ptr" => "NDR_POINTER_PTR" ); -sub type2ft($) -{ - my($t) = shift; - - return "FT_UINT$1" if $t =~ /uint(8|16|32|64)/; - return "FT_INT$1" if $t =~ /int(8|16|32|64)/; - return "FT_UINT64", if $t eq "HYPER_T" or $t eq "NTTIME_hyper" - or $t eq "hyper"; - - # TODO: should NTTIME_hyper be a FT_ABSOLUTE_TIME as well? - - return "FT_ABSOLUTE_TIME" if $t eq "NTTIME" or $t eq "NTTIME_1sec"; - - return "FT_STRING" if ($t eq "string"); - - return "FT_NONE"; -} - sub StripPrefixes($) { my ($s) = @_; @@ -156,7 +138,7 @@ sub Enum($$$) my $enum_size = $e->{BASE_TYPE}; $enum_size =~ s/uint//g; - register_type($name, "offset = $dissectorname(tvb, offset, pinfo, tree, drep, \@HF\@, \@PARAM\@);", type2ft($e->{BASE_TYPE}), "BASE_DEC", "0", "VALS($valsstring)", $enum_size / 8); + register_type($name, "offset = $dissectorname(tvb, offset, pinfo, tree, drep, \@HF\@, \@PARAM\@);", "FT_UINT$enum_size", "BASE_DEC", "0", "VALS($valsstring)", $enum_size / 8); } sub Bitmap($$$) @@ -230,7 +212,7 @@ sub Bitmap($$$) my $size = $e->{BASE_TYPE}; $size =~ s/uint//g; - register_type($name, "offset = $dissectorname(tvb, offset, pinfo, tree, drep, \@HF\@, \@PARAM\@);", type2ft($e->{BASE_TYPE}), "BASE_DEC", "0", "NULL", $size/8); + register_type($name, "offset = $dissectorname(tvb, offset, pinfo, tree, drep, \@HF\@, \@PARAM\@);", "FT_UINT$size", "BASE_DEC", "0", "NULL", $size/8); } sub ElementLevel($$$$$) @@ -330,7 +312,19 @@ sub Element($$$) my $call_code = "offset = $dissectorname(tvb, offset, pinfo, tree, drep);"; - my $hf = register_hf_field("hf_$ifname\_$pn\_$e->{NAME}", field2name($e->{NAME}), "$ifname.$pn.$e->{NAME}", type2ft($e->{TYPE}), "BASE_HEX", "NULL", 0, ""); + my $type = find_type($e->{TYPE}); + + if (not defined($type)) { + # default settings + $type = { + MASK => 0, + VALSSTRING => "NULL", + FT_TYPE => "FT_NONE", + BASE_TYPE => "BASE_HEX" + }; + } + + my $hf = register_hf_field("hf_$ifname\_$pn\_$e->{NAME}", field2name($e->{NAME}), "$ifname.$pn.$e->{NAME}", $type->{FT_TYPE}, $type->{BASE_TYPE}, $type->{VALSSTRING}, $type->{MASK}, ""); $hf_used{$hf} = 1; my $eltname = StripPrefixes($pn) . ".$e->{NAME}"; @@ -685,6 +679,12 @@ sub ProcessInterface($) pidl_hdr "#endif /* $define */"; } +sub find_type($) +{ + my $n = shift; + + return $conformance->{types}->{$n}; +} sub register_type($$$$$$$) { |