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