Loading util/mkerr.pl +76 −6 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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; Loading Loading @@ -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:"; Loading @@ -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:"; Loading Loading @@ -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"); Loading @@ -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}; Loading @@ -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; Loading Loading @@ -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", Loading Loading @@ -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 Loading Loading
util/mkerr.pl +76 −6 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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; Loading Loading @@ -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:"; Loading @@ -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:"; Loading Loading @@ -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"); Loading @@ -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}; Loading @@ -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; Loading Loading @@ -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", Loading Loading @@ -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 Loading