X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=util%2Fmkerr.pl;h=ebc059ef228382cc1d48e148d0dfdcbf1825d102;hp=47896eab6f2721b94712cf12c37cec3c483e0280;hb=525f51f6c98751de4db3b81789044d32e3686cda;hpb=6d31193858f176c276fe5f27d36408977933c1d6 diff --git a/util/mkerr.pl b/util/mkerr.pl index 47896eab6f..ebc059ef22 100644 --- a/util/mkerr.pl +++ b/util/mkerr.pl @@ -3,9 +3,10 @@ my $config = "crypto/err/openssl.ec"; my $debug = 0; my $rebuild = 0; -my $static = 0; +my $static = 1; my $recurse = 0; my $reindex = 0; +my $dowrite = 0; while (@ARGV) { @@ -25,8 +26,11 @@ while (@ARGV) { } elsif($arg eq "-reindex") { $reindex = 1; shift @ARGV; - } elsif($arg eq "-static") { - $static = 1; + } elsif($arg eq "-nostatic") { + $static = 0; + shift @ARGV; + } elsif($arg eq "-write") { + $dowrite = 1; shift @ARGV; } else { last; @@ -62,7 +66,6 @@ while() } elsif (/^R\s+(\S+)\s+(\S+)/) { $rextra{$1} = $2; $rcodes{$1} = $2; - # Add extra reason with $1, value $2 } } @@ -108,23 +111,26 @@ while (($lib, $hdr) = each %hinc) } foreach (split /;/, $def) { - s/^[\n\s]*//g; + s/^[\n\s]*//g; s/[\n\s]*$//g; - next if (/\(\*(\w*)\([^\)]+/); - next if (/\w+\W+(\w+)\W*\(\s*\)$/s); - if (/\w+\W+\w+\W*\(.*\)$/s) { - s/\)[\s\n]*$/\)/s; + next if(/typedef\W/); + if (/\(\*(\w*)\([^\)]+/) { + my $name = $1; + $name =~ tr/[a-z]/[A-Z]/; + $ftrans{$name} = $1; + } elsif (/\w+\W+(\w+)\W*\(\s*\)$/s){ + # K&R C + next ; + } elsif (/\w+\W+\w+\W*\(.*\)$/s) { while (not /\(\)$/s) { s/[^\(\)]*\)$/\)/s; s/\([^\(\)]*\)\)$/\)/s; } s/\(void\)//; /(\w+)\W*\(\)/s; - next if(/typedef\W/); my $name = $1; $name =~ tr/[a-z]/[A-Z]/; $ftrans{$name} = $1; - } elsif (/\(/ and not (/=/ or /DECLARE_STACK/)) { print STDERR "Header $hdr: cannot parse: $_;\n"; } @@ -168,23 +174,28 @@ while (($lib, $hdr) = each %hinc) # oddly named structure BIO_F_CTX which needs to be ignored. # If a code doesn't exist in list compiled from headers then mark it # with the value "X" as a place holder to give it a value later. +# Store all function and reason codes found in %ufcodes and %urcodes +# so all those unreferenced can be printed out. foreach $file (@source) { # Don't parse the error source file. next if exists $cskip{$file}; - open(IN, "<$file") || die "Can't open source file $_\n"; + open(IN, "<$file") || die "Can't open source file $file\n"; while() { - if(/(([A-Z0-9]+)_F_[A-Z0-9_]+)/) { + if(/(([A-Z0-9]+)_F_([A-Z0-9_]+))/) { next unless exists $csrc{$2}; next if($1 eq "BIO_F_BUFFER_CTX"); + $ufcodes{$1} = 1; if(!exists $fcodes{$1}) { $fcodes{$1} = "X"; $fnew{$2}++; } + $notrans{$1} = 1 unless exists $ftrans{$3}; } if(/(([A-Z0-9]+)_R_[A-Z0-9_]+)/) { next unless exists $csrc{$2}; + $urcodes{$1} = 1; if(!exists $rcodes{$1}) { $rcodes{$1} = "X"; $rnew{$2}++; @@ -206,7 +217,7 @@ foreach $lib (keys %csrc) } else { print STDERR "$lib:\t\t$fnew{$lib} New Functions,"; print STDERR " $rnew{$lib} New Reasons.\n"; - + next unless $dowrite; } # If we get here then we have some new error codes so we @@ -273,8 +284,14 @@ EOF # Rewrite the C source file containing the error details. - $hfile =~ /([^\/]+)$/; - my $hincf = $1; + my $hincf; + if($static) { + $hfile =~ /([^\/]+)$/; + $hincf = ""; + } else { + $hincf = "\"$hfile\""; + } + open (OUT,">$cfile") || die "Can't open $cfile for writing"; @@ -340,7 +357,7 @@ EOF #include #include -#include +#include $hincf /* BEGIN ERROR CODES */ #ifndef NO_ERR @@ -354,8 +371,6 @@ EOF $fn = $1; if(exists $ftrans{$fn}) { $fn = $ftrans{$fn}; - } else { - push @notrans, $i; } print OUT "{ERR_PACK(0,$i,0),\t\"$fn\"},\n"; } @@ -417,7 +432,7 @@ static ERR_STRING_DATA ${lib}_lib_name[]= int ${lib}_lib_error_code=0; -void ERR_load_${lib}_strings() +void ERR_load_${lib}_strings(void) { static int init=1; @@ -435,15 +450,11 @@ void ERR_load_${lib}_strings() #ifdef ${lib}_LIB_NAME ${lib}_lib_name->error = ERR_PACK(${lib}_lib_error_code,0,0); ERR_load_strings(0,${lib}_lib_name); -#endif; +#endif } } -void ERR_${lib}_error(function,reason,file,line) -int function; -int reason; -char *file; -int line; +void ERR_${lib}_error(int function, int reason, char *file, int line) { if (${lib}_lib_error_code == 0) ${lib}_lib_error_code=ERR_get_next_error_library(); @@ -457,9 +468,35 @@ EOF } -if($debug && defined(@notrans)) { +if($debug && defined(%notrans)) { print STDERR "The following function codes were not translated:\n"; - foreach(@notrans) + foreach(sort keys %notrans) + { + print STDERR "$_\n"; + } +} + +# Make a list of unreferenced function and reason codes + +foreach (keys %fcodes) { + push (@funref, $_) unless exists $ufcodes{$_}; +} + +foreach (keys %rcodes) { + push (@runref, $_) unless exists $urcodes{$_}; +} + +if($debug && defined(@funref) ) { + print STDERR "The following function codes were not referenced:\n"; + foreach(sort @funref) + { + print STDERR "$_\n"; + } +} + +if($debug && defined(@runref) ) { + print STDERR "The following reason codes were not referenced:\n"; + foreach(sort @runref) { print STDERR "$_\n"; }