155714Skris#!/usr/local/bin/perl
255714Skris#
355714Skris# This is just a quick script to scan for cases where the 'error'
455714Skris# function name in a XXXerr() macro is wrong.
555714Skris#
655714Skris# Run in the top level by going
755714Skris# perl util/ck_errf.pl */*.c */*/*.c
855714Skris#
955714Skris
10238405Sjkimmy $err_strict = 0;
11238405Sjkimmy $bad = 0;
12238405Sjkim
1355714Skrisforeach $file (@ARGV)
1455714Skris	{
15238405Sjkim	if ($file eq "-strict")
16238405Sjkim		{
17238405Sjkim		$err_strict = 1;
18238405Sjkim		next;
19238405Sjkim		}
2055714Skris	open(IN,"<$file") || die "unable to open $file\n";
2155714Skris	$func="";
2255714Skris	while (<IN>)
2355714Skris		{
24280297Sjkim		if (!/;$/ && /^\**([a-zA-Z].*[\s*])?([A-Za-z_0-9]+)\(.*([),]|$)/)
2555714Skris			{
26160814Ssimon			/^([^()]*(\([^()]*\)[^()]*)*)\(/;
27160814Ssimon			$1 =~ /([A-Za-z_0-9]*)$/;
28160814Ssimon			$func = $1;
2955714Skris			$func =~ tr/A-Z/a-z/;
3055714Skris			}
31238405Sjkim		if (/([A-Z0-9]+)err\(([^,]+)/ && ! /ckerr_ignore/)
3255714Skris			{
3355714Skris			$errlib=$1;
3455714Skris			$n=$2;
35160814Ssimon
36160814Ssimon			if ($func eq "")
37238405Sjkim				{ print "$file:$.:???:$n\n"; $bad = 1; next; }
38160814Ssimon
3955714Skris			if ($n !~ /([^_]+)_F_(.+)$/)
4055714Skris				{
4155714Skris		#		print "check -$file:$.:$func:$n\n";
4255714Skris				next;
4355714Skris				}
4455714Skris			$lib=$1;
4555714Skris			$n=$2;
4655714Skris
4755714Skris			if ($lib ne $errlib)
48238405Sjkim				{ print "$file:$.:$func:$n [${errlib}err]\n"; $bad = 1; next; }
4955714Skris
5055714Skris			$n =~ tr/A-Z/a-z/;
5155714Skris			if (($n ne $func) && ($errlib ne "SYS"))
52238405Sjkim				{ print "$file:$.:$func:$n\n"; $bad = 1; next; }
5355714Skris	#		print "$func:$1\n";
5455714Skris			}
5555714Skris		}
5655714Skris	close(IN);
5755714Skris        }
5855714Skris
59238405Sjkimif ($bad && $err_strict)
60238405Sjkim	{
61238405Sjkim	print STDERR "FATAL: error discrepancy\n";
62238405Sjkim	exit 1;
63238405Sjkim	}
64238405Sjkim
65