X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=util%2Fmkstack.pl;h=f708610a7888d1a7fe4d9eeaf2426f462f785b87;hp=6cdab4708ca9221c6f74066152f05aa0ea76276e;hb=a75829deefe25b289995a8fd977537ef3cca0d31;hpb=3aceb94b9e6ac4722b96d4fb1cf7e1a4358941e0 diff --git a/util/mkstack.pl b/util/mkstack.pl index 6cdab4708c..f708610a78 100755 --- a/util/mkstack.pl +++ b/util/mkstack.pl @@ -1,43 +1,28 @@ #!/usr/local/bin/perl -w -# + # This is a utility that searches out "DECLARE_STACK_OF()" -# declarations in header files, and updates/creates/replaces -# the corresponding macro declarations that follow it. The -# reason is that with "DEBUG_SAFESTACK" defined, each type -# will generate 19 functions, all type-safe variants of the -# base "sk_***" functions for the general STACK type. Without -# DEBUG_SAFESTACK defined, we need to macro define all the -# "type'd sk_##type##_***" functions as mapping directly to -# the standard sk_*** equivalents. As it's not generally -# possible to have macros that generate macros, we need to -# control this from the "outside", here in this script. +# declarations in .h and .c files, and updates/creates/replaces +# the corresponding macro declarations in crypto/stack/safestack.h. +# As it's not generally possible to have macros that generate macros, +# we need to control this from the "outside", here in this script. # # Geoff Thorpe, June, 2000 (with massive Perl-hacking # help from Steve Robb) -my $type_thing; -my $recurse = 0; -my @files = @ARGV; +my $safestack = "crypto/stack/safestack"; +my $do_write; while (@ARGV) { my $arg = $ARGV[0]; - if($arg eq "-recurse") { - $recurse = 1; - shift @ARGV; - } else { - last; + if($arg eq "-write") { + $do_write = 1; } + shift @ARGV; } -if($recurse) { - @source = (, , , ); -} else { - @source = @ARGV; -} +@source = (, , , ); foreach $file (@source) { - # After "Configure" has been run, we need to make sure we don't - # overwrite symbollic links with new header files! next if -l $file; # Open the .c/.h file for reading @@ -47,60 +32,161 @@ foreach $file (@source) { if (/^DECLARE_STACK_OF\(([^)]+)\)/) { push @stacklst, $1; } + if (/^DECLARE_SPECIAL_STACK_OF\(([^,\s]+)\s*,\s*([^>\s]+)\)/) { + push @sstacklst, [$1, $2]; + } + if (/^DECLARE_ASN1_SET_OF\(([^)]+)\)/) { + push @asn1setlst, $1; + } + if (/^DECLARE_PKCS12_STACK_OF\(([^)]+)\)/) { + push @p12stklst, $1; + } + if (/^DECLARE_LHASH_OF\(([^)]+)\)/) { + push @lhashlst, $1; + } } close(IN); - write_defines("crypto/stack/safestack"); - unlink("crypto/stack/safestack.h"); - rename("crypto/stack/safestack.tmp","crypto/stack/safestack.h"); } -sub write_defines { - my $stackfile = $_[0]; - my $inside_block = 0; - open IN, "< $stackfile.h" || die "Can't open input file"; - open OUT, "> $stackfile.tmp" || die "Can't open output file"; - while() { - if (m|^/\* This block of defines is updated by a perl script, please do not touch! \*/|) { - $inside_block = 1; - } - if (m|^/\* End of perl script block, you may now edit :-\) \*/|) { - $inside_block = 0; - } elsif ($inside_block == 0) { - print OUT; - } - next if($inside_block != 1); - print OUT <) { + $old_stackfile .= $_; + + if (m|^/\* This block of defines is updated by util/mkstack.pl, please do not touch! \*/|) { + $inside_block = 1; + } + if (m|^/\* End of util/mkstack.pl block, you may now edit :-\) \*/|) { + $inside_block = 0; + } elsif ($inside_block == 0) { + $new_stackfile .= $_; + } + next if($inside_block != 1); + $new_stackfile .= "/* This block of defines is updated by util/mkstack.pl, please do not touch! */"; + + foreach $type_thing (sort @stacklst) { + $new_stackfile .= <[0]; + my $t2 = $type_thing->[1]; + $new_stackfile .= <$safestack.h" || die "Can't open output file"; + print OUT $new_stackfile; close OUT; }