openssl/crypto/err/err_code.pl
1998-12-21 10:56:39 +00:00

106 lines
1.8 KiB
Perl

#!/usr/local/bin/perl
while (@ARGV)
{
$in=shift(@ARGV);
if ($in =~ /^-conf$/)
{
$in=shift(@ARGV);
open(IN,"<$in") || die "unable to open '$in'\n";
while (<IN>)
{
s/#.*$//;
s/\s+$//;
next if (/^$/);
if (/^L\s+(\S+)\s+(\S+)$/)
{ $errfile{$1}=$2; }
elsif (/^F\s+(\S+)$/)
{ $function{$1}=1; }
elsif (/^R\s+(\S+)\s+(\S+)$/)
{ $r_value{$1}=$2; }
else { die "bad input line: $in:$.\n"; }
}
close(IN);
next;
}
open(IN,"<$in") || die "unable to open '$in'\n";
$last="";
while (<IN>)
{
if (/err\(([A-Z0-9]+_F_[0-9A-Z_]+)\s*,\s*([0-9A-Z]+_R_[0-9A-Z_]+)\s*\)/)
{
if ($1 != $last)
{
if ($function{$1} == 0)
{
printf STDERR "$. $1 is bad\n";
}
}
$function{$1}++;
$last=$1;
$reason{$2}++;
}
}
close(IN);
}
foreach (keys %function,keys %reason)
{
/^([A-Z0-9]+)_/;
$prefix{$1}++;
}
@F=sort keys %function;
@R=sort keys %reason;
foreach $j (sort keys %prefix)
{
next if $errfile{$j} eq "NONE";
printf STDERR "doing %-6s - ",$j;
if (defined($errfile{$j}))
{
open(OUT,">$errfile{$j}") ||
die "unable to open '$errfile{$j}':$!\n";
$close_file=1;
}
else
{
*OUT=*STDOUT;
$close=0;
}
@f=grep(/^${j}_/,@F);
@r=grep(/^${j}_/,@R);
$num=100;
print OUT "/* Error codes for the $j functions. */\n\n";
print OUT "/* Function codes. */\n";
$f_count=0;
foreach $i (@f)
{
$z=6-int(length($i)/8);
printf OUT "#define $i%s $num\n","\t" x $z;
$num++;
$f_count++;
}
$num=100;
print OUT "\n/* Reason codes. */\n";
$r_count=0;
foreach $i (@r)
{
$z=6-int(length($i)/8);
if (defined($r_value{$i}))
{
printf OUT "#define $i%s $r_value{$i}\n","\t" x $z;
}
else
{
printf OUT "#define $i%s $num\n","\t" x $z;
$num++;
}
$r_count++;
}
close(OUT) if $close_file;
printf STDERR "%3d functions, %3d reasons\n",$f_count,$r_count;
}