diff options
author | brunsch <brunsch@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-06-04 00:08:46 +0000 |
---|---|---|
committer | brunsch <brunsch@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-06-04 00:08:46 +0000 |
commit | 6de865bddf018e283b3309eb096e7d2ea37e689c (patch) | |
tree | e692b633545b27226d8a846802562f44b4941431 /bin | |
parent | 91f83fc4ecb56294efd19e1f9f0d1ea748f05821 (diff) | |
download | ATCD-6de865bddf018e283b3309eb096e7d2ea37e689c.tar.gz |
ChangeLogTag:Sat Jun 3 17:00:11 2000 Darrell Brunsch <brunsch@uci.edu>
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/fuzz.pl | 184 |
1 files changed, 160 insertions, 24 deletions
diff --git a/bin/fuzz.pl b/bin/fuzz.pl index ee737282c36..5ee6932b2f2 100755 --- a/bin/fuzz.pl +++ b/bin/fuzz.pl @@ -13,12 +13,10 @@ use Getopt::Std; # # Add tests for these: # -# - LPTSTR, TCHAR, etc. in any file # - Using TAO_TRY macros instead of ACE_TRY # - no relative path to tao_idl in the .dsp files # - Linking to wrong type of library in dsp's # - not setting up the release configs correctly in dsp files -# - files not ending with newline # - Guards in .h files # - no global functions # - other commit_check checks, missing LF at eof, tabs, trailing spaces. @@ -33,8 +31,14 @@ use Getopt::Std; @files_cpp = (); @files_inl = (); @files_h = (); +@files_html = (); @files_dsp = (); +@files_idl = (); +@files_pl = (); +# To keep track of errors and warnings +$errors = 0; +$warnings = 0; ############################################################################## @@ -74,22 +78,50 @@ sub find_files () sub store_file ($) { my $name = shift; - if ($name =~ /\.cpp$/i) { + if ($name =~ /\.(c|cc|cpp|cxx)$/i) { push @files_cpp, ($name); } elsif ($name =~ /\.(inl|i)$/i) { push @files_inl, ($name); } - elsif ($name =~ /\.h$/i) { + elsif ($name =~ /\.(h|hh|hpp|hxx)$/i) { push @files_h, ($name); } - elsif ($name =~ /\.dsp$/i) { + elsif ($name =~ /\.(htm|html)$/i) { + push @files_html, ($name); + } + elsif ($name =~ /\.(dsp|vcp)$/i) { push @files_dsp, ($name); } + elsif ($name =~ /\.(pidl|idl)$/i) { + push @files_idl, ($name); + } + elsif ($name =~ /\.pl$/i) { + push @files_pl, ($name); + } +} + +############################################################################## +## Just messages + +sub print_error ($) +{ + my $msg = shift; + print "Error: $msg\n"; + ++$errors; +} + + +sub print_warning ($) +{ + my $msg = shift; + print "Warning: $msg\n"; + ++$warnings; } ############################################################################## +## Tests # The point of this test is to check for the existence of ACE_INLINE # or ASYS_INLINE in a .cpp file. This is most commonly caused by @@ -104,10 +136,10 @@ sub check_for_inline_in_cpp () while (<FILE>) { ++$line; if (/^ACE_INLINE/) { - print "Error: ACE_INLINE found in $file on line $line\n"; + print_error ("ACE_INLINE found in $file on line $line"); } if (/^ASYS_INLINE/) { - print "Error: ASYS_INLINE found in $file on line $line\n"; + print_error ("ASYS_INLINE found in $file on line $line"); } } close (FILE); @@ -118,13 +150,14 @@ sub check_for_inline_in_cpp () } } -# This test checks to make sure files have the $Id$ string in them. +# This test checks to make sure files have the $Id string in them. # Commit_check should find these when checking in files, but this can # be used locally or to check for files sub check_for_id_string () { - print "Running \$ID check\n"; - foreach $file (@files_cpp, @files_inl, @files_h) { + print "Running \$ID\$ string check\n"; + foreach $file (@files_cpp, @files_inl, @files_h, + @files_html, @files_idl, @files_pl) { my $found = 0; if (open (FILE, $file)) { print "Looking at file $file\n" if $opt_d; @@ -135,7 +168,30 @@ sub check_for_id_string () } close (FILE); if ($found == 0) { - print "Error: No \$Id string found in $file\n"; + print_error ("No \$Id string found in $file"); + } + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + + +# This test checks for the newline at the end of a file +sub check_for_newline () +{ + print "Running newline check\n"; + foreach $file (@files_cpp, @files_inl, @files_h, @files_idl, @files_pl) { + if (open (FILE, $file)) { + my $line; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + $line = $_ + } + close (FILE); + if ($line !~ /\n$/) { + print_error ("No ending newline found in $file"); } } else { @@ -145,6 +201,7 @@ sub check_for_id_string () } + # This test checks for the use of "inline" instead of ACE_INLINE sub check_for_inline () { @@ -152,11 +209,18 @@ sub check_for_inline () foreach $file (@files_inl) { my $line = 0; if (open (FILE, $file)) { + my $disable = 0; print "Looking at file $file\n" if $opt_d; while (<FILE>) { ++$line; - if (/^[\s+]inline/) { - print "Error: inline found in $file on line $line\n"; + if (/FUZZ\: disable check_for_inline/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_inline/) { + $disable = 0; + } + if ($disable == 0 and /^\s*inline/) { + print_error ("inline found in $file on line $line"); } } close (FILE); @@ -177,11 +241,19 @@ sub check_for_math_include () foreach $file (@files_h, @files_cpp, @files_inl) { my $line = 0; if (open (FILE, $file)) { + my $disable = 0; print "Looking at file $file\n" if $opt_d; while (<FILE>) { ++$line; - if (/^\s*#\s*include\s*[\/\*\*\/]?\s*\<math\.h\>/) { - print "Error: math.h included in $file on line $line\n"; + if (/FUZZ\: disable check_for_math_include/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_math_include/) { + $disable = 0; + } + if ($disable == 0 + and /^\s*#\s*include\s*(\/\*\*\/){0,1}\s*\<math\.h\>/) { + print_error ("math.h included in $file on line $line"); } } close (FILE); @@ -202,8 +274,8 @@ sub check_for_line_length () print "Looking at file $file\n" if $opt_d; while (<FILE>) { ++$line; - if (/.{80,}?/) { - print "Error: Over 80 chars on line $line in $file\n"; + if (/.{80,}/) { + print_error ("Over 80 chars on line $line in $file"); } } close (FILE); @@ -227,8 +299,8 @@ sub check_for_preprocessor_comments () while (<FILE>) { ++$line; if (/^\#.*\/\//) { - print "Error: C++ comment in directive on " - . "line $line in $file\n"; + print_error ("C++ comment in directive on " + ."line $line in $file"); } } close (FILE); @@ -240,13 +312,66 @@ sub check_for_preprocessor_comments () } +# This test checks for the use of the Win32 Unicode string defines +# or outdated ASYS_* macros +# We should only be using the ACE_TCHAR, ACE_TEXT macros instead. +sub check_for_tchar +{ + print "Running TCHAR test\n"; + foreach $file (@files_h, @files_cpp, @files_inl) { + my $line = 0; + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + ++$line; + if (/FUZZ\: disable check_for_tchar/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_tchar/) { + $disable = 0; + } + if ($disable == 0) { + if (/LPTSTR/) { + print_error ("LPTSTR found on line $line in $file"); + } + + if (/LPCTSTR/) { + print_error ("LPCTSTR found on line $line in $file"); + } + + if (/ASYS_TCHAR/) { + print_error ("ASYS_TCHAR found on " + ."line $line in $file"); + } + elsif (/TCHAR/ and $` !~ /ACE_/) { + print_error ("TCHAR on line $line in $file"); + } + + if (/ASYS_TEXT/) { + print_error ("ASYS_TEXT on line $line in $file"); + } + elsif (/TEXT/ and $` !~ /ACE_/) { + print_error ("TEXT found on line $line in $file"); + } + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + ############################################################################## -our ($opt_d, $opt_h, $opt_l, $opt_m); +our ($opt_c, $opt_d, $opt_h, $opt_l, $opt_m); -if (!getopts ('dhl:m') || $opt_h) { - print "fuzz.pl [-dhm] [-l level]\n"; +if (!getopts ('cdhl:m') || $opt_h) { + print "fuzz.pl [-cdhm] [-l level] [file1, file2, ...]\n"; print "\n"; + print " -c only look at the files passed in\n"; print " -d turn on debugging\n"; print " -h display this help\n"; print " -l level set detection level (default = 5)\n"; @@ -258,7 +383,12 @@ if (!$opt_l) { $opt_l = 5; } -if ($opt_m) { +if ($opt_c) { + foreach $file (@ARGV) { + store_file ($file); + } +} +elsif ($opt_m) { find_mod_files (); } else { @@ -266,8 +396,14 @@ else { } check_for_inline_in_cpp () if ($opt_l >= 2); -check_for_id_string () if ($opt_l >= 2); +check_for_id_string () if ($opt_l >= 1); +check_for_newline () if ($opt_l >= 1); check_for_inline () if ($opt_l >= 2); check_for_math_include () if ($opt_l >= 3); check_for_line_length () if ($opt_l >= 8); check_for_preprocessor_comments () if ($opt_l >= 7); +check_for_tchar () if ($opt_l >= 6); + +print "\n$errors error(s), $warnings warnings(s)\n"; + +exit (1) if $errors > 0; |