Submitted by: Ger Hobbelt <ger@hobbelt.com>
Approved by: steve@openssl.org

Updates to mkerr.pl script.
This commit is contained in:
Dr. Stephen Henson 2009-04-15 15:16:29 +00:00
parent 268e78c305
commit 0b4b8ba64e

View File

@ -44,6 +44,71 @@ while (@ARGV) {
} elsif($arg eq "-write") {
$dowrite = 1;
shift @ARGV;
} elsif($arg eq "-help" || $arg eq "-h" || $arg eq "-?" || $arg eq "--help") {
print STDERR <<"EOF";
mkerr.pl [options] ...
Options:
-conf F Use the config file F instead of the default one:
crypto/err/openssl.ec
-hprefix P Prepend the filenames in generated #include <header>
statements with prefix P. Default: 'openssl/' (without
the quotes, naturally)
-debug Turn on debugging verbose output on stderr.
-rebuild Rebuild all header and C source files, irrespective of the
fact if any error or function codes have been added/removed.
Default: only update files for libraries which saw change
(of course, this requires '-write' as well, or no
files will be touched!)
-recurse scan a preconfigured set of directories / files for error and
function codes:
(<crypto/*.c>, <crypto/*/*.c>, <ssl/*.c>, <apps/*.c>)
When this option is NOT specified, the filelist is taken from
the commandline instead. Here, wildcards may be embedded. (Be
sure to escape those to prevent the shell from expanding them
for you when you wish mkerr.pl to do so instead.)
Default: take file list to scan from the command line.
-reindex Discard the numeric values previously assigned to the error
and function codes as extracted from the scanned header files;
instead renumber all of them starting from 100. (Note that
the numbers assigned through 'R' records in the config file
remain intact.)
Default: keep previously assigned numbers. (You are warned
when collisions are detected.)
-nostatic Generates a different source code, where these additional
functions are generated for each library specified in the
config file:
void ERR_load_<LIB>_strings(void);
void ERR_unload_<LIB>_strings(void);
void ERR_<LIB>_error(int f, int r, char *fn, int ln);
#define <LIB>err(f,r) ERR_<LIB>_error(f,r,__FILE__,__LINE__)
while the code facilitates the use of these in an environment
where the error support routines are dynamically loaded at
runtime.
Default: 'static' code generation.
-staticloader Prefix generated functions with the 'static' scope modifier.
Default: don't write any scope modifier prefix.
-write Actually (over)write the generated code to the header and C
source files as assigned to each library through the config
file.
Default: don't write.
-help / -h / -? / --help Show this help text.
... Additional arguments are added to the file list to scan,
assuming '-recurse' was NOT specified on the command line.
EOF
exit 1;
} else {
last;
}
@ -69,8 +134,8 @@ while(<IN>)
$cskip{$3} = $1;
if($3 ne "NONE") {
$csrc{$1} = $3;
$fmax{$1} = 99;
$rmax{$1} = 99;
$fmax{$1} = 100;
$rmax{$1} = 100;
$fassigned{$1} = ":";
$rassigned{$1} = ":";
$fnew{$1} = 0;
@ -196,7 +261,7 @@ while (($hdr, $lib) = each %libinc)
if($1 eq "R") {
$rcodes{$name} = $code;
if ($rassigned{$lib} =~ /:$code:/) {
print STDERR "!! ERROR: $lib reason code $code assigned twice\n";
print STDERR "!! ERROR: $lib reason code $code assigned twice (collision at $name)\n";
++$errcount;
}
$rassigned{$lib} .= "$code:";
@ -206,7 +271,7 @@ while (($hdr, $lib) = each %libinc)
}
} else {
if ($fassigned{$lib} =~ /:$code:/) {
print STDERR "!! ERROR: $lib function code $code assigned twice\n";
print STDERR "!! ERROR: $lib function code $code assigned twice (collision at $name)\n";
++$errcount;
}
$fassigned{$lib} .= "$code:";
@ -263,6 +328,9 @@ foreach $file (@source) {
print STDERR "File loaded: ".$file."\r" if $debug;
open(IN, "<$file") || die "Can't open source file $file\n";
while(<IN>) {
# skip obsoleted source files entirely!
last if(/^#error\s+obsolete/);
if(/(([A-Z0-9]+)_F_([A-Z0-9_]+))/) {
next unless exists $csrc{$2};
next if($1 eq "BIO_F_BUFFER_CTX");
@ -272,6 +340,7 @@ foreach $file (@source) {
$fnew{$2}++;
}
$notrans{$1} = 1 unless exists $ftrans{$3};
print STDERR "Function: $1\t= $fcodes{$1} (lib: $2, name: $3)\n" if $debug;
}
if(/(([A-Z0-9]+)_R_[A-Z0-9_]+)/) {
next unless exists $csrc{$2};
@ -280,6 +349,7 @@ foreach $file (@source) {
$rcodes{$1} = "X";
$rnew{$2}++;
}
print STDERR "Reason: $1\t= $rcodes{$1} (lib: $2)\n" if $debug;
}
}
close IN;
@ -321,7 +391,7 @@ foreach $lib (keys %csrc)
} else {
push @out,
"/* ====================================================================\n",
" * Copyright (c) 2001-2008 The OpenSSL Project. All rights reserved.\n",
" * Copyright (c) 2001-2009 The OpenSSL Project. All rights reserved.\n",
" *\n",
" * Redistribution and use in source and binary forms, with or without\n",
" * modification, are permitted provided that the following conditions\n",
@ -506,7 +576,7 @@ EOF
print OUT <<"EOF";
/* $cfile */
/* ====================================================================
* Copyright (c) 1999-2008 The OpenSSL Project. All rights reserved.
* Copyright (c) 1999-2009 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions