blob: f13af5c50b4ec80095dbdb82970cdea3cb41bf8f [file] [log] [blame]
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001#!/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
Dr. Stephen Henson3ed36032009-08-12 17:30:37 +000010my $err_strict = 0;
11my $bad = 0;
12
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000013foreach $file (@ARGV)
14 {
Dr. Stephen Henson3ed36032009-08-12 17:30:37 +000015 if ($file eq "-strict")
16 {
17 $err_strict = 1;
18 next;
19 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000020 open(IN,"<$file") || die "unable to open $file\n";
21 $func="";
22 while (<IN>)
23 {
Bodo Möller8afca8d2005-05-11 03:45:39 +000024 if (!/;$/ && /^([a-zA-Z].*[\s*])?([A-Za-z_0-9]+)\(.*[),]/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000025 {
Bodo Möller8afca8d2005-05-11 03:45:39 +000026 /^([^()]*(\([^()]*\)[^()]*)*)\(/;
27 $1 =~ /([A-Za-z_0-9]*)$/;
28 $func = $1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000029 $func =~ tr/A-Z/a-z/;
30 }
Dr. Stephen Henson5c95c2a2006-07-17 16:33:31 +000031 if (/([A-Z0-9]+)err\(([^,]+)/ && ! /ckerr_ignore/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000032 {
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000033 $errlib=$1;
34 $n=$2;
Bodo Möller8afca8d2005-05-11 03:45:39 +000035
36 if ($func eq "")
Dr. Stephen Henson3ed36032009-08-12 17:30:37 +000037 { print "$file:$.:???:$n\n"; $bad = 1; next; }
Bodo Möller8afca8d2005-05-11 03:45:39 +000038
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000039 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)
Dr. Stephen Henson3ed36032009-08-12 17:30:37 +000048 { print "$file:$.:$func:$n [${errlib}err]\n"; $bad = 1; next; }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000049
50 $n =~ tr/A-Z/a-z/;
51 if (($n ne $func) && ($errlib ne "SYS"))
Dr. Stephen Henson3ed36032009-08-12 17:30:37 +000052 { print "$file:$.:$func:$n\n"; $bad = 1; next; }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000053 # print "$func:$1\n";
54 }
55 }
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +000056 close(IN);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000057 }
58
Dr. Stephen Henson3ed36032009-08-12 17:30:37 +000059if ($bad && $err_strict)
60 {
61 print STDERR "FATAL: error discrepancy\n";
62 exit 1;
63 }
64