Make update
[openssl.git] / util / ck_errf.pl
index 3af91744c5f2bfee1f5f5651c08ea23b905879d8..7fc536786e6d18968082c0a7f0c6a164c5d2b765 100755 (executable)
@@ -1,5 +1,11 @@
-#!/usr/local/bin/perl
+#! /usr/bin/env perl
+# Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
 #
+# Licensed under the OpenSSL license (the "License").  You may not use
+# this file except in compliance with the License.  You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
 # This is just a quick script to scan for cases where the 'error'
 # function name in a XXXerr() macro is wrong.
 # 
 # perl util/ck_errf.pl */*.c */*/*.c
 #
 
+my $err_strict = 0;
+my $bad = 0;
+
 foreach $file (@ARGV)
        {
+       if ($file eq "-strict")
+               {
+               $err_strict = 1;
+               next;
+               }
        open(IN,"<$file") || die "unable to open $file\n";
        $func="";
        while (<IN>)
                {
-               if (/^[a-zA-Z].+[\s*]([A-Za-z_0-9]+)\(.*\)/)
+               if (!/;$/ && /^\**([a-zA-Z_].*[\s*])?([A-Za-z_0-9]+)\(.*([),]|$)/)
                        {
-                       $func=$1;
+                       /^([^()]*(\([^()]*\)[^()]*)*)\(/;
+                       $1 =~ /([A-Za-z_0-9]*)$/;
+                       $func = $1;
                        $func =~ tr/A-Z/a-z/;
                        }
-               if (/([A-Z0-9]+)err\(([^,]+)/)
+               if (/([A-Z0-9]+)err\(([^,]+)/ && ! /ckerr_ignore/)
                        {
-                       next if ($func eq "");
                        $errlib=$1;
                        $n=$2;
+
+                       if ($func eq "")
+                               { print "$file:$.:???:$n\n"; $bad = 1; next; }
+
                        if ($n !~ /([^_]+)_F_(.+)$/)
                                {
                #               print "check -$file:$.:$func:$n\n";
@@ -32,13 +51,20 @@ foreach $file (@ARGV)
                        $n=$2;
 
                        if ($lib ne $errlib)
-                               { print "$file:$.:$func:$n\n"; next; }
+                               { print "$file:$.:$func:$n [${errlib}err]\n"; $bad = 1; next; }
 
                        $n =~ tr/A-Z/a-z/;
                        if (($n ne $func) && ($errlib ne "SYS"))
-                               { print "$file:$.:$func:$n\n"; next; }
+                               { print "$file:$.:$func:$n\n"; $bad = 1; next; }
        #               print "$func:$1\n";
                        }
                }
+       close(IN);
         }
 
+if ($bad && $err_strict)
+       {
+       print STDERR "FATAL: error discrepancy\n";
+       exit 1;
+       }
+