r10123: Add more warnings. Support quotes in conformance command arguments
authorJelmer Vernooij <jelmer@samba.org>
Fri, 9 Sep 2005 18:21:59 +0000 (18:21 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:38:01 +0000 (13:38 -0500)
source/pidl/lib/Parse/Pidl/Ethereal/Conformance.pm
source/pidl/lib/Parse/Pidl/Ethereal/NDR.pm
source/pidl/lib/Parse/Pidl/Util.pm

index 47107b5969cd73505827d6281db6d37e59106d55..c12731eca258f3795c94da8b62344c4f41af95ac 100644 (file)
@@ -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 = (
index de936eb97d05ae6ebf043c21c115010f9eda8a5d..08acdc4172e1e49e79c25899357704f0b37bf01a 100644 (file)
@@ -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;
index 8854be9d745716ca4e8fae4ad3b859f43eaa7ac8..572df0dc097b76d5cd3ceea9259d0175f6e08262 100644 (file)
@@ -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;