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