- while(<IN>) {
- if (/^DECLARE_STACK_OF\(([^)]+)\)/) {
- $type_thing = $1;
- $output_defines = 1;
- }
- 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;
- }
- if($output_defines == 1) {
- print <<EOF;
-/* This block of defines is updated by a perl script, please do not touch! */
-#ifndef DEBUG_SAFESTACK
- #define sk_${type_thing}_new(a) sk_new((int (*) \\
- (const char * const *, const char * const *))(a))
- #define sk_${type_thing}_new_null() sk_new_null()
- #define sk_${type_thing}_free(a) sk_free(a)
- #define sk_${type_thing}_num(a) sk_num(a)
- #define sk_${type_thing}_value(a,b) ((${type_thing} *) \\
- sk_value((a),(b)))
- #define sk_${type_thing}_set(a,b,c) ((${type_thing} *) \\
- sk_set((a),(b),(char *)(c)))
- #define sk_${type_thing}_zero(a) sk_zero(a)
- #define sk_${type_thing}_push(a,b) sk_push((a),(char *)(b))
- #define sk_${type_thing}_unshift(a,b) sk_unshift((a),(b))
- #define sk_${type_thing}_find(a,b) sk_find((a), (char *)(b))
- #define sk_${type_thing}_delete(a,b) ((${type_thing} *) \\
- sk_delete((a),(b)))
- #define sk_${type_thing}_delete_ptr(a,b) ((${type_thing} *) \\
- sk_delete_ptr((a),(char *)(b)))
- #define sk_${type_thing}_insert(a,b,c) sk_insert((a),(char *)(b),(c))
- #define sk_${type_thing}_set_cmp_func(a,b) ((int (*) \\
- (const ${type_thing} * const *,const ${type_thing} * const *)) \\
- sk_set_cmp_func((a),(int (*) \\
- (const char * const *, const char * const *))(b)))
- #define sk_${type_thing}_dup(a) sk_dup(a)
- #define sk_${type_thing}_pop_free(a,b) sk_pop_free((a),(void (*)(void *))(b))
- #define sk_${type_thing}_shift(a) ((${type_thing} *)sk_shift(a))
- #define sk_${type_thing}_pop(a) ((${type_thing} *)sk_pop(a))
- #define sk_${type_thing}_sort(a) sk_sort(a)
-#endif /* !DEBUG_SAFESTACK */
-/* End of perl script block, you may now edit :-) */
+my $old_stackfile = "";
+my $new_stackfile = "";
+my $inside_block = 0;
+my $type_thing;
+
+open(IN, "< $safestack.h") || die "Can't open input file: $!";
+while(<IN>) {
+ $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 .= <<EOF;
+
+#define sk_${type_thing}_new(st) SKM_sk_new($type_thing, (st))
+#define sk_${type_thing}_new_null() SKM_sk_new_null($type_thing)
+#define sk_${type_thing}_free(st) SKM_sk_free($type_thing, (st))
+#define sk_${type_thing}_num(st) SKM_sk_num($type_thing, (st))
+#define sk_${type_thing}_value(st, i) SKM_sk_value($type_thing, (st), (i))
+#define sk_${type_thing}_set(st, i, val) SKM_sk_set($type_thing, (st), (i), (val))
+#define sk_${type_thing}_zero(st) SKM_sk_zero($type_thing, (st))
+#define sk_${type_thing}_push(st, val) SKM_sk_push($type_thing, (st), (val))
+#define sk_${type_thing}_unshift(st, val) SKM_sk_unshift($type_thing, (st), (val))
+#define sk_${type_thing}_find(st, val) SKM_sk_find($type_thing, (st), (val))
+#define sk_${type_thing}_find_ex(st, val) SKM_sk_find_ex($type_thing, (st), (val))
+#define sk_${type_thing}_delete(st, i) SKM_sk_delete($type_thing, (st), (i))
+#define sk_${type_thing}_delete_ptr(st, ptr) SKM_sk_delete_ptr($type_thing, (st), (ptr))
+#define sk_${type_thing}_insert(st, val, i) SKM_sk_insert($type_thing, (st), (val), (i))
+#define sk_${type_thing}_set_cmp_func(st, cmp) SKM_sk_set_cmp_func($type_thing, (st), (cmp))
+#define sk_${type_thing}_dup(st) SKM_sk_dup($type_thing, st)
+#define sk_${type_thing}_pop_free(st, free_func) SKM_sk_pop_free($type_thing, (st), (free_func))
+#define sk_${type_thing}_shift(st) SKM_sk_shift($type_thing, (st))
+#define sk_${type_thing}_pop(st) SKM_sk_pop($type_thing, (st))
+#define sk_${type_thing}_sort(st) SKM_sk_sort($type_thing, (st))
+#define sk_${type_thing}_is_sorted(st) SKM_sk_is_sorted($type_thing, (st))
+EOF
+ }
+ foreach $type_thing (sort @asn1setlst) {
+ $new_stackfile .= <<EOF;
+
+#define d2i_ASN1_SET_OF_${type_thing}(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\
+ SKM_ASN1_SET_OF_d2i($type_thing, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
+#define i2d_ASN1_SET_OF_${type_thing}(st, pp, i2d_func, ex_tag, ex_class, is_set) \\
+ SKM_ASN1_SET_OF_i2d($type_thing, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
+#define ASN1_seq_pack_${type_thing}(st, i2d_func, buf, len) \\
+ SKM_ASN1_seq_pack($type_thing, (st), (i2d_func), (buf), (len))
+#define ASN1_seq_unpack_${type_thing}(buf, len, d2i_func, free_func) \\
+ SKM_ASN1_seq_unpack($type_thing, (buf), (len), (d2i_func), (free_func))