source: trunk/third/openssl/util/mkstack.pl @ 15530

Revision 15530, 4.4 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r15529, which included commits to RCS files with non-trunk default branches.
  • Property svn:executable set to *
Line 
1#!/usr/local/bin/perl -w
2
3# This is a utility that searches out "DECLARE_STACK_OF()"
4# declarations in .h and .c files, and updates/creates/replaces
5# the corresponding macro declarations in crypto/stack/safestack.h.
6# As it's not generally possible to have macros that generate macros,
7# we need to control this from the "outside", here in this script.
8#
9# Geoff Thorpe, June, 2000 (with massive Perl-hacking
10#                           help from Steve Robb)
11
12my $safestack = "crypto/stack/safestack";
13
14my $do_write;
15while (@ARGV) {
16        my $arg = $ARGV[0];
17        if($arg eq "-write") {
18                $do_write = 1;
19        }
20        shift @ARGV;
21}
22
23
24@source = (<crypto/*.[ch]>, <crypto/*/*.[ch]>, <rsaref/*.[ch]>, <ssl/*.[ch]>);
25foreach $file (@source) {
26        next if -l $file;
27
28        # Open the .c/.h file for reading
29        open(IN, "< $file") || die "Can't open $file for reading: $!";
30
31        while(<IN>) {
32                if (/^DECLARE_STACK_OF\(([^)]+)\)/) {
33                        push @stacklst, $1;
34                } if (/^DECLARE_ASN1_SET_OF\(([^)]+)\)/) {
35                        push @asn1setlst, $1;
36                } if (/^DECLARE_PKCS12_STACK_OF\(([^)]+)\)/) {
37                        push @p12stklst, $1;
38                }
39        }
40        close(IN);
41}
42
43
44
45my $old_stackfile = "";
46my $new_stackfile = "";
47my $inside_block = 0;
48my $type_thing;
49
50open(IN, "< $safestack.h") || die "Can't open input file: $!";
51while(<IN>) {
52        $old_stackfile .= $_;
53
54        if (m|^/\* This block of defines is updated by util/mkstack.pl, please do not touch! \*/|) {
55                $inside_block = 1;
56        }
57        if (m|^/\* End of util/mkstack.pl block, you may now edit :-\) \*/|) {
58                $inside_block = 0;
59        } elsif ($inside_block == 0) {
60                $new_stackfile .= $_;
61        }
62        next if($inside_block != 1);
63        $new_stackfile .= "/* This block of defines is updated by util/mkstack.pl, please do not touch! */";
64               
65        foreach $type_thing (sort @stacklst) {
66                $new_stackfile .= <<EOF;
67
68#define sk_${type_thing}_new(st) SKM_sk_new($type_thing, (st))
69#define sk_${type_thing}_new_null() SKM_sk_new_null($type_thing)
70#define sk_${type_thing}_free(st) SKM_sk_free($type_thing, (st))
71#define sk_${type_thing}_num(st) SKM_sk_num($type_thing, (st))
72#define sk_${type_thing}_value(st, i) SKM_sk_value($type_thing, (st), (i))
73#define sk_${type_thing}_set(st, i, val) SKM_sk_set($type_thing, (st), (i), (val))
74#define sk_${type_thing}_zero(st) SKM_sk_zero($type_thing, (st))
75#define sk_${type_thing}_push(st, val) SKM_sk_push($type_thing, (st), (val))
76#define sk_${type_thing}_unshift(st, val) SKM_sk_unshift($type_thing, (st), (val))
77#define sk_${type_thing}_find(st, val) SKM_sk_find($type_thing, (st), (val))
78#define sk_${type_thing}_delete(st, i) SKM_sk_delete($type_thing, (st), (i))
79#define sk_${type_thing}_delete_ptr(st, ptr) SKM_sk_delete_ptr($type_thing, (st), (ptr))
80#define sk_${type_thing}_insert(st, val, i) SKM_sk_insert($type_thing, (st), (val), (i))
81#define sk_${type_thing}_set_cmp_func(st, cmp) SKM_sk_set_cmp_func($type_thing, (st), (cmp))
82#define sk_${type_thing}_dup(st) SKM_sk_dup($type_thing, st)
83#define sk_${type_thing}_pop_free(st, free_func) SKM_sk_pop_free($type_thing, (st), (free_func))
84#define sk_${type_thing}_shift(st) SKM_sk_shift($type_thing, (st))
85#define sk_${type_thing}_pop(st) SKM_sk_pop($type_thing, (st))
86#define sk_${type_thing}_sort(st) SKM_sk_sort($type_thing, (st))
87EOF
88        }
89        foreach $type_thing (sort @asn1setlst) {
90                $new_stackfile .= <<EOF;
91
92#define d2i_ASN1_SET_OF_${type_thing}(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\
93        SKM_ASN1_SET_OF_d2i($type_thing, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
94#define i2d_ASN1_SET_OF_${type_thing}(st, pp, i2d_func, ex_tag, ex_class, is_set) \\
95        SKM_ASN1_SET_OF_i2d($type_thing, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
96#define ASN1_seq_pack_${type_thing}(st, i2d_func, buf, len) \\
97        SKM_ASN1_seq_pack($type_thing, (st), (i2d_func), (buf), (len))
98#define ASN1_seq_unpack_${type_thing}(buf, len, d2i_func, free_func) \\
99        SKM_ASN1_seq_unpack($type_thing, (buf), (len), (d2i_func), (free_func))
100EOF
101        }
102        foreach $type_thing (sort @p12stklst) {
103                $new_stackfile .= <<EOF;
104
105#define PKCS12_decrypt_d2i_${type_thing}(algor, d2i_func, free_func, pass, passlen, oct, seq) \\
106        SKM_PKCS12_decrypt_d2i($type_thing, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq))
107EOF
108        }
109        $new_stackfile .= "/* End of util/mkstack.pl block, you may now edit :-) */\n";
110        $inside_block = 2;
111}
112
113
114if ($new_stackfile eq $old_stackfile) {
115        print "No changes to $safestack.h.\n";
116        exit 0; # avoid unnecessary rebuild
117}
118
119if ($do_write) {
120        print "Writing new $safestack.h.\n";
121        open OUT, ">$safestack.h" || die "Can't open output file";
122        print OUT $new_stackfile;
123        close OUT;
124}
Note: See TracBrowser for help on using the repository browser.