Home | History | Annotate | Line # | Download | only in util
ck_errf.pl revision 1.1.1.2
      1      1.1  christos #!/usr/local/bin/perl
      2      1.1  christos #
      3      1.1  christos # This is just a quick script to scan for cases where the 'error'
      4      1.1  christos # function name in a XXXerr() macro is wrong.
      5      1.1  christos # 
      6      1.1  christos # Run in the top level by going
      7      1.1  christos # perl util/ck_errf.pl */*.c */*/*.c
      8      1.1  christos #
      9      1.1  christos 
     10  1.1.1.2  christos my $err_strict = 0;
     11  1.1.1.2  christos my $bad = 0;
     12  1.1.1.2  christos 
     13      1.1  christos foreach $file (@ARGV)
     14      1.1  christos 	{
     15  1.1.1.2  christos 	if ($file eq "-strict")
     16  1.1.1.2  christos 		{
     17  1.1.1.2  christos 		$err_strict = 1;
     18  1.1.1.2  christos 		next;
     19  1.1.1.2  christos 		}
     20      1.1  christos 	open(IN,"<$file") || die "unable to open $file\n";
     21      1.1  christos 	$func="";
     22      1.1  christos 	while (<IN>)
     23      1.1  christos 		{
     24      1.1  christos 		if (!/;$/ && /^([a-zA-Z].*[\s*])?([A-Za-z_0-9]+)\(.*[),]/)
     25      1.1  christos 			{
     26      1.1  christos 			/^([^()]*(\([^()]*\)[^()]*)*)\(/;
     27      1.1  christos 			$1 =~ /([A-Za-z_0-9]*)$/;
     28      1.1  christos 			$func = $1;
     29      1.1  christos 			$func =~ tr/A-Z/a-z/;
     30      1.1  christos 			}
     31      1.1  christos 		if (/([A-Z0-9]+)err\(([^,]+)/ && ! /ckerr_ignore/)
     32      1.1  christos 			{
     33      1.1  christos 			$errlib=$1;
     34      1.1  christos 			$n=$2;
     35      1.1  christos 
     36      1.1  christos 			if ($func eq "")
     37  1.1.1.2  christos 				{ print "$file:$.:???:$n\n"; $bad = 1; next; }
     38      1.1  christos 
     39      1.1  christos 			if ($n !~ /([^_]+)_F_(.+)$/)
     40      1.1  christos 				{
     41      1.1  christos 		#		print "check -$file:$.:$func:$n\n";
     42      1.1  christos 				next;
     43      1.1  christos 				}
     44      1.1  christos 			$lib=$1;
     45      1.1  christos 			$n=$2;
     46      1.1  christos 
     47      1.1  christos 			if ($lib ne $errlib)
     48  1.1.1.2  christos 				{ print "$file:$.:$func:$n [${errlib}err]\n"; $bad = 1; next; }
     49      1.1  christos 
     50      1.1  christos 			$n =~ tr/A-Z/a-z/;
     51      1.1  christos 			if (($n ne $func) && ($errlib ne "SYS"))
     52  1.1.1.2  christos 				{ print "$file:$.:$func:$n\n"; $bad = 1; next; }
     53      1.1  christos 	#		print "$func:$1\n";
     54      1.1  christos 			}
     55      1.1  christos 		}
     56      1.1  christos 	close(IN);
     57      1.1  christos         }
     58      1.1  christos 
     59  1.1.1.2  christos if ($bad && $err_strict)
     60  1.1.1.2  christos 	{
     61  1.1.1.2  christos 	print STDERR "FATAL: error discrepancy\n";
     62  1.1.1.2  christos 	exit 1;
     63  1.1.1.2  christos 	}
     64  1.1.1.2  christos 
     65