From 5d6706e0775b6c9a9920966f6ef9fcd4a8d34345 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 9 Sep 2005 18:21:59 +0000 Subject: r10123: Add more warnings. Support quotes in conformance command arguments (This used to be commit e6842fcc9809bcf8de678199a6f28fbbde6c0b83) --- .../pidl/lib/Parse/Pidl/Ethereal/Conformance.pm | 22 ++++++-- source4/pidl/lib/Parse/Pidl/Ethereal/NDR.pm | 62 ++++++++++++++-------- source4/pidl/lib/Parse/Pidl/Util.pm | 2 +- 3 files changed, 60 insertions(+), 26 deletions(-) (limited to 'source4/pidl/lib/Parse') diff --git a/source4/pidl/lib/Parse/Pidl/Ethereal/Conformance.pm b/source4/pidl/lib/Parse/Pidl/Ethereal/Conformance.pm index 47107b5969..c12731eca2 100644 --- a/source4/pidl/lib/Parse/Pidl/Ethereal/Conformance.pm +++ b/source4/pidl/lib/Parse/Pidl/Ethereal/Conformance.pm @@ -31,7 +31,7 @@ sub handle_type($$$$$$$$$$) print "$pos: warning: invalid FT_TYPE `$ft_type'\n"; } - unless(alid_base_type($base_type)) { + unless (valid_base_type($base_type)) { print "$pos: warning: invalid BASE_TYPE `$base_type'\n"; } @@ -74,7 +74,12 @@ sub handle_param_value($$$$) return; } - $data->{dissectorparams}->{$dissector_name} = $value; + $data->{dissectorparams}->{$dissector_name} = { + DISSECTOR => $dissector_name, + PARAM => $value, + POS => $pos, + USED => 0 + }; } sub valid_base_type($) @@ -158,7 +163,11 @@ sub handle_fielddescription($$$$) { my ($pos,$data,$field,$desc) = @_; - $data->{fielddescription}->{$field} = $desc; + $data->{fielddescription}->{$field} = { + DESCRIPTION => $desc, + POS => $pos, + USED => 0 + }; } sub handle_import @@ -172,7 +181,12 @@ sub handle_import return; } - $data->{imports}->{$dissectorname} = join(' ', @_); + $data->{imports}->{$dissectorname} = { + NAME => $dissectorname, + DATA => join(' ', @_), + USED => 0, + POS => $pos + }; } my %field_handlers = ( diff --git a/source4/pidl/lib/Parse/Pidl/Ethereal/NDR.pm b/source4/pidl/lib/Parse/Pidl/Ethereal/NDR.pm index de936eb97d..08acdc4172 100644 --- a/source4/pidl/lib/Parse/Pidl/Ethereal/NDR.pm +++ b/source4/pidl/lib/Parse/Pidl/Ethereal/NDR.pm @@ -10,12 +10,11 @@ package Parse::Pidl::Ethereal::NDR; use strict; use Parse::Pidl::Typelist; -use Parse::Pidl::Util qw(has_property ParseExpr property_matches); +use Parse::Pidl::Util qw(has_property ParseExpr property_matches make_str); use Parse::Pidl::NDR; use Parse::Pidl::Dump qw(DumpTypedef DumpFunction); use Parse::Pidl::Ethereal::Conformance qw(ReadConformance); -my %types; my @ett; my %hf_used = (); @@ -238,7 +237,8 @@ sub ElementLevel($$$$$) my $param = 0; if (defined($conformance->{dissectorparams}->{$myname})) { - $param = $conformance->{dissectorparams}->{$myname}; + $conformance->{dissectorparams}->{$myname}->{PARAM} = 1; + $param = $conformance->{dissectorparams}->{$myname}->{PARAM}; } if ($l->{TYPE} eq "POINTER") { @@ -285,10 +285,12 @@ sub ElementLevel($$$$$) } else { my $call; - if (defined($types{$l->{DATA_TYPE}})) { - $call= $types{$l->{DATA_TYPE}}->{CALL}; - } elsif ($conformance->{imports}->{$l->{DATA_TYPE}}) { - $call = $conformance->{imports}->{$l->{DATA_TYPE}}; + if ($conformance->{imports}->{$l->{DATA_TYPE}}) { + $call = $conformance->{imports}->{$l->{DATA_TYPE}}->{DATA}; + $conformance->{imports}->{$l->{DATA_TYPE}}->{USED} = 1; + } elsif (defined($conformance->{types}->{$l->{DATA_TYPE}})) { + $call= $conformance->{types}->{$l->{DATA_TYPE}}->{DISSECTOR_NAME}; + $conformance->{types}->{$l->{DATA_TYPE}}->{USED} = 1; } else { if ($l->{DATA_TYPE} =~ /^([a-z]+)\_(.*)$/) { @@ -557,7 +559,7 @@ sub RegisterInterface($) # These can be changed to non-pidl_code names if the old dissectors # in epan/dissctors are deleted. - my $name = "\"" . uc($x->{NAME}) . " (pidl)\""; + my $name = uc($x->{NAME}) . " (pidl)"; my $short_name = uc($x->{NAME}); my $filter_name = $x->{NAME}; @@ -571,7 +573,7 @@ sub RegisterInterface($) $filter_name = $conformance->{protocols}->{$x->{NAME}}->{FILTERNAME}; } - pidl_code "proto_dcerpc_$x->{NAME} = proto_register_protocol($name, \"$short_name\", \"$filter_name\");"; + pidl_code "proto_dcerpc_$x->{NAME} = proto_register_protocol(".make_str($name).", ".make_str($short_name).", ".make_str($filter_name).");"; pidl_code "proto_register_field_array(proto_dcerpc_$x->{NAME}, hf, array_length (hf));"; pidl_code "proto_register_subtree_array(ett, array_length(ett));"; @@ -674,14 +676,14 @@ sub register_type($$$$$$$) { my ($type,$call,$ft,$base,$mask,$vals,$length) = @_; - $types{$type} = { - TYPE => $type, - CALL => $call, + $conformance->{types}->{$type} = { + NAME => $type, + DISSECTOR_NAME => $call, FT_TYPE => $ft, - BASE => $base, + BASE_TYPE => $base, MASK => $mask, VALSSTRING => $vals, - LENGTH => $length + ALIGNMENT => $length }; } @@ -854,7 +856,8 @@ sub register_hf_field($$$$$$$$) if ((not defined($blurb) or $blurb eq "") and defined($conformance->{fielddescription}->{$index})) { $conformance->{header_fields}->{$index}->{BLURB} = - $conformance->{fielddescription}->{$index}; + $conformance->{fielddescription}->{$index}->{DESCRIPTION}; + $conformance->{fielddescription}->{$index}->{USED} = 1; } return $index; @@ -881,7 +884,7 @@ sub DumpHfList() foreach (values %{$conformance->{header_fields}}) { $res .= "\t{ &$_->{INDEX}, - { \"$_->{NAME}\", \"$_->{FILTER}\", $_->{FT_TYPE}, $_->{BASE_TYPE}, $_->{VALSSTRING}, $_->{MASK}, \"$_->{BLURB}\", HFILL }}, + { ".make_str($_->{NAME}).", ".make_str($_->{FILTER}).", $_->{FT_TYPE}, $_->{BASE_TYPE}, $_->{VALSSTRING}, $_->{MASK}, ".make_str($_->{BLURB}).", HFILL }}, "; } @@ -925,12 +928,29 @@ sub CheckUsed($) } } - #FIXME: PARAM_VALUE's - #FIXME: TYPE - #FIXME: FIELDDESCRIPTION - #FIXME: Import -} + foreach (values %{$conformance->{dissectorparams}}) { + if (not $_->{USED}) { + print "$_->{POS}: warning: dissector param never used\n"; + } + } + + foreach (values %{$conformance->{imports}}) { + if (not $_->{USED}) { + print "$_->{POS}: warning: import never used\n"; + } + } + foreach (values %{$conformance->{types}}) { + if (not $_->{USED} and defined($_->{POS})) { + print "$_->{POS}: warning: type never used\n"; + } + } + foreach (values %{$conformance->{fielddescription}}) { + if (not $_->{USED}) { + print "$_->{POS}: warning: description never used\n"; + } + } +} 1; diff --git a/source4/pidl/lib/Parse/Pidl/Util.pm b/source4/pidl/lib/Parse/Pidl/Util.pm index 8854be9d74..572df0dc09 100644 --- a/source4/pidl/lib/Parse/Pidl/Util.pm +++ b/source4/pidl/lib/Parse/Pidl/Util.pm @@ -6,7 +6,7 @@ package Parse::Pidl::Util; require Exporter; @ISA = qw(Exporter); -@EXPORT = qw(has_property property_matches ParseExpr is_constant); +@EXPORT = qw(has_property property_matches ParseExpr is_constant make_str); use strict; -- cgit