diff options
author | djm <> | 2010-10-01 22:54:21 +0000 |
---|---|---|
committer | djm <> | 2010-10-01 22:54:21 +0000 |
commit | 829fd51d4f8dde4a7f3bf54754f3c1d1a502f5e2 (patch) | |
tree | e03b9f1bd051e844b971936729e9df549a209130 /src/lib/libcrypto/util | |
parent | e6b755d2a53d3cac7a344dfdd6bf7c951cac754c (diff) | |
download | openbsd-829fd51d4f8dde4a7f3bf54754f3c1d1a502f5e2.tar.gz openbsd-829fd51d4f8dde4a7f3bf54754f3c1d1a502f5e2.tar.bz2 openbsd-829fd51d4f8dde4a7f3bf54754f3c1d1a502f5e2.zip |
import OpenSSL-1.0.0a
Diffstat (limited to 'src/lib/libcrypto/util')
-rw-r--r-- | src/lib/libcrypto/util/mkerr.pl | 113 | ||||
-rw-r--r-- | src/lib/libcrypto/util/mkstack.pl | 74 |
2 files changed, 174 insertions, 13 deletions
diff --git a/src/lib/libcrypto/util/mkerr.pl b/src/lib/libcrypto/util/mkerr.pl index 554bebb159..15b774f277 100644 --- a/src/lib/libcrypto/util/mkerr.pl +++ b/src/lib/libcrypto/util/mkerr.pl | |||
@@ -1,6 +1,7 @@ | |||
1 | #!/usr/local/bin/perl -w | 1 | #!/usr/local/bin/perl -w |
2 | 2 | ||
3 | my $config = "crypto/err/openssl.ec"; | 3 | my $config = "crypto/err/openssl.ec"; |
4 | my $hprefix = "openssl/"; | ||
4 | my $debug = 0; | 5 | my $debug = 0; |
5 | my $rebuild = 0; | 6 | my $rebuild = 0; |
6 | my $static = 1; | 7 | my $static = 1; |
@@ -12,11 +13,16 @@ my $staticloader = ""; | |||
12 | my $pack_errcode; | 13 | my $pack_errcode; |
13 | my $load_errcode; | 14 | my $load_errcode; |
14 | 15 | ||
16 | my $errcount; | ||
17 | |||
15 | while (@ARGV) { | 18 | while (@ARGV) { |
16 | my $arg = $ARGV[0]; | 19 | my $arg = $ARGV[0]; |
17 | if($arg eq "-conf") { | 20 | if($arg eq "-conf") { |
18 | shift @ARGV; | 21 | shift @ARGV; |
19 | $config = shift @ARGV; | 22 | $config = shift @ARGV; |
23 | } elsif($arg eq "-hprefix") { | ||
24 | shift @ARGV; | ||
25 | $hprefix = shift @ARGV; | ||
20 | } elsif($arg eq "-debug") { | 26 | } elsif($arg eq "-debug") { |
21 | $debug = 1; | 27 | $debug = 1; |
22 | shift @ARGV; | 28 | shift @ARGV; |
@@ -38,14 +44,78 @@ while (@ARGV) { | |||
38 | } elsif($arg eq "-write") { | 44 | } elsif($arg eq "-write") { |
39 | $dowrite = 1; | 45 | $dowrite = 1; |
40 | shift @ARGV; | 46 | shift @ARGV; |
47 | } elsif($arg eq "-help" || $arg eq "-h" || $arg eq "-?" || $arg eq "--help") { | ||
48 | print STDERR <<"EOF"; | ||
49 | mkerr.pl [options] ... | ||
50 | |||
51 | Options: | ||
52 | |||
53 | -conf F Use the config file F instead of the default one: | ||
54 | crypto/err/openssl.ec | ||
55 | |||
56 | -hprefix P Prepend the filenames in generated #include <header> | ||
57 | statements with prefix P. Default: 'openssl/' (without | ||
58 | the quotes, naturally) | ||
59 | |||
60 | -debug Turn on debugging verbose output on stderr. | ||
61 | |||
62 | -rebuild Rebuild all header and C source files, irrespective of the | ||
63 | fact if any error or function codes have been added/removed. | ||
64 | Default: only update files for libraries which saw change | ||
65 | (of course, this requires '-write' as well, or no | ||
66 | files will be touched!) | ||
67 | |||
68 | -recurse scan a preconfigured set of directories / files for error and | ||
69 | function codes: | ||
70 | (<crypto/*.c>, <crypto/*/*.c>, <ssl/*.c>, <apps/*.c>) | ||
71 | When this option is NOT specified, the filelist is taken from | ||
72 | the commandline instead. Here, wildcards may be embedded. (Be | ||
73 | sure to escape those to prevent the shell from expanding them | ||
74 | for you when you wish mkerr.pl to do so instead.) | ||
75 | Default: take file list to scan from the command line. | ||
76 | |||
77 | -reindex Discard the numeric values previously assigned to the error | ||
78 | and function codes as extracted from the scanned header files; | ||
79 | instead renumber all of them starting from 100. (Note that | ||
80 | the numbers assigned through 'R' records in the config file | ||
81 | remain intact.) | ||
82 | Default: keep previously assigned numbers. (You are warned | ||
83 | when collisions are detected.) | ||
84 | |||
85 | -nostatic Generates a different source code, where these additional | ||
86 | functions are generated for each library specified in the | ||
87 | config file: | ||
88 | void ERR_load_<LIB>_strings(void); | ||
89 | void ERR_unload_<LIB>_strings(void); | ||
90 | void ERR_<LIB>_error(int f, int r, char *fn, int ln); | ||
91 | #define <LIB>err(f,r) ERR_<LIB>_error(f,r,__FILE__,__LINE__) | ||
92 | while the code facilitates the use of these in an environment | ||
93 | where the error support routines are dynamically loaded at | ||
94 | runtime. | ||
95 | Default: 'static' code generation. | ||
96 | |||
97 | -staticloader Prefix generated functions with the 'static' scope modifier. | ||
98 | Default: don't write any scope modifier prefix. | ||
99 | |||
100 | -write Actually (over)write the generated code to the header and C | ||
101 | source files as assigned to each library through the config | ||
102 | file. | ||
103 | Default: don't write. | ||
104 | |||
105 | -help / -h / -? / --help Show this help text. | ||
106 | |||
107 | ... Additional arguments are added to the file list to scan, | ||
108 | assuming '-recurse' was NOT specified on the command line. | ||
109 | |||
110 | EOF | ||
111 | exit 1; | ||
41 | } else { | 112 | } else { |
42 | last; | 113 | last; |
43 | } | 114 | } |
44 | } | 115 | } |
45 | 116 | ||
46 | if($recurse) { | 117 | if($recurse) { |
47 | @source = ( <crypto/*.c>, <crypto/*/*.c>, <ssl/*.c>, | 118 | @source = (<crypto/*.c>, <crypto/*/*.c>, <ssl/*.c>); |
48 | <fips/*.c>, <fips/*/*.c>); | ||
49 | } else { | 119 | } else { |
50 | @source = @ARGV; | 120 | @source = @ARGV; |
51 | } | 121 | } |
@@ -64,8 +134,8 @@ while(<IN>) | |||
64 | $cskip{$3} = $1; | 134 | $cskip{$3} = $1; |
65 | if($3 ne "NONE") { | 135 | if($3 ne "NONE") { |
66 | $csrc{$1} = $3; | 136 | $csrc{$1} = $3; |
67 | $fmax{$1} = 99; | 137 | $fmax{$1} = 100; |
68 | $rmax{$1} = 99; | 138 | $rmax{$1} = 100; |
69 | $fassigned{$1} = ":"; | 139 | $fassigned{$1} = ":"; |
70 | $rassigned{$1} = ":"; | 140 | $rassigned{$1} = ":"; |
71 | $fnew{$1} = 0; | 141 | $fnew{$1} = 0; |
@@ -191,7 +261,8 @@ while (($hdr, $lib) = each %libinc) | |||
191 | if($1 eq "R") { | 261 | if($1 eq "R") { |
192 | $rcodes{$name} = $code; | 262 | $rcodes{$name} = $code; |
193 | if ($rassigned{$lib} =~ /:$code:/) { | 263 | if ($rassigned{$lib} =~ /:$code:/) { |
194 | print STDERR "!! ERROR: $lib reason code $code assigned twice\n"; | 264 | print STDERR "!! ERROR: $lib reason code $code assigned twice (collision at $name)\n"; |
265 | ++$errcount; | ||
195 | } | 266 | } |
196 | $rassigned{$lib} .= "$code:"; | 267 | $rassigned{$lib} .= "$code:"; |
197 | if(!(exists $rextra{$name}) && | 268 | if(!(exists $rextra{$name}) && |
@@ -200,7 +271,8 @@ while (($hdr, $lib) = each %libinc) | |||
200 | } | 271 | } |
201 | } else { | 272 | } else { |
202 | if ($fassigned{$lib} =~ /:$code:/) { | 273 | if ($fassigned{$lib} =~ /:$code:/) { |
203 | print STDERR "!! ERROR: $lib function code $code assigned twice\n"; | 274 | print STDERR "!! ERROR: $lib function code $code assigned twice (collision at $name)\n"; |
275 | ++$errcount; | ||
204 | } | 276 | } |
205 | $fassigned{$lib} .= "$code:"; | 277 | $fassigned{$lib} .= "$code:"; |
206 | if($code > $fmax{$lib}) { | 278 | if($code > $fmax{$lib}) { |
@@ -231,6 +303,7 @@ while (($hdr, $lib) = each %libinc) | |||
231 | if ($rmax{$lib} >= 1000) { | 303 | if ($rmax{$lib} >= 1000) { |
232 | print STDERR "!! ERROR: SSL error codes 1000+ are reserved for alerts.\n"; | 304 | print STDERR "!! ERROR: SSL error codes 1000+ are reserved for alerts.\n"; |
233 | print STDERR "!! Any new alerts must be added to $config.\n"; | 305 | print STDERR "!! Any new alerts must be added to $config.\n"; |
306 | ++$errcount; | ||
234 | print STDERR "\n"; | 307 | print STDERR "\n"; |
235 | } | 308 | } |
236 | } | 309 | } |
@@ -255,6 +328,9 @@ foreach $file (@source) { | |||
255 | print STDERR "File loaded: ".$file."\r" if $debug; | 328 | print STDERR "File loaded: ".$file."\r" if $debug; |
256 | open(IN, "<$file") || die "Can't open source file $file\n"; | 329 | open(IN, "<$file") || die "Can't open source file $file\n"; |
257 | while(<IN>) { | 330 | while(<IN>) { |
331 | # skip obsoleted source files entirely! | ||
332 | last if(/^#error\s+obsolete/); | ||
333 | |||
258 | if(/(([A-Z0-9]+)_F_([A-Z0-9_]+))/) { | 334 | if(/(([A-Z0-9]+)_F_([A-Z0-9_]+))/) { |
259 | next unless exists $csrc{$2}; | 335 | next unless exists $csrc{$2}; |
260 | next if($1 eq "BIO_F_BUFFER_CTX"); | 336 | next if($1 eq "BIO_F_BUFFER_CTX"); |
@@ -264,6 +340,7 @@ foreach $file (@source) { | |||
264 | $fnew{$2}++; | 340 | $fnew{$2}++; |
265 | } | 341 | } |
266 | $notrans{$1} = 1 unless exists $ftrans{$3}; | 342 | $notrans{$1} = 1 unless exists $ftrans{$3}; |
343 | print STDERR "Function: $1\t= $fcodes{$1} (lib: $2, name: $3)\n" if $debug; | ||
267 | } | 344 | } |
268 | if(/(([A-Z0-9]+)_R_[A-Z0-9_]+)/) { | 345 | if(/(([A-Z0-9]+)_R_[A-Z0-9_]+)/) { |
269 | next unless exists $csrc{$2}; | 346 | next unless exists $csrc{$2}; |
@@ -272,6 +349,7 @@ foreach $file (@source) { | |||
272 | $rcodes{$1} = "X"; | 349 | $rcodes{$1} = "X"; |
273 | $rnew{$2}++; | 350 | $rnew{$2}++; |
274 | } | 351 | } |
352 | print STDERR "Reason: $1\t= $rcodes{$1} (lib: $2)\n" if $debug; | ||
275 | } | 353 | } |
276 | } | 354 | } |
277 | close IN; | 355 | close IN; |
@@ -313,7 +391,7 @@ foreach $lib (keys %csrc) | |||
313 | } else { | 391 | } else { |
314 | push @out, | 392 | push @out, |
315 | "/* ====================================================================\n", | 393 | "/* ====================================================================\n", |
316 | " * Copyright (c) 2001-2008 The OpenSSL Project. All rights reserved.\n", | 394 | " * Copyright (c) 2001-2010 The OpenSSL Project. All rights reserved.\n", |
317 | " *\n", | 395 | " *\n", |
318 | " * Redistribution and use in source and binary forms, with or without\n", | 396 | " * Redistribution and use in source and binary forms, with or without\n", |
319 | " * modification, are permitted provided that the following conditions\n", | 397 | " * modification, are permitted provided that the following conditions\n", |
@@ -369,6 +447,10 @@ foreach $lib (keys %csrc) | |||
369 | "#ifndef HEADER_${lib}_ERR_H\n", | 447 | "#ifndef HEADER_${lib}_ERR_H\n", |
370 | "#define HEADER_${lib}_ERR_H\n", | 448 | "#define HEADER_${lib}_ERR_H\n", |
371 | "\n", | 449 | "\n", |
450 | "#ifdef __cplusplus\n", | ||
451 | "extern \"C\" {\n", | ||
452 | "#endif\n", | ||
453 | "\n", | ||
372 | "/* BEGIN ERROR CODES */\n"; | 454 | "/* BEGIN ERROR CODES */\n"; |
373 | } | 455 | } |
374 | open (OUT, ">$hfile") || die "Can't Open File $hfile for writing\n"; | 456 | open (OUT, ">$hfile") || die "Can't Open File $hfile for writing\n"; |
@@ -455,14 +537,21 @@ EOF | |||
455 | if (/\b(${lib}_R_\w*)\b.*\"(.*)\"/) { | 537 | if (/\b(${lib}_R_\w*)\b.*\"(.*)\"/) { |
456 | $err_reason_strings{$1} = $2; | 538 | $err_reason_strings{$1} = $2; |
457 | } | 539 | } |
540 | if (/\b${lib}_F_(\w*)\b.*\"(.*)\"/) { | ||
541 | if (!exists $ftrans{$1} && ($1 ne $2)) { | ||
542 | print STDERR "WARNING: Mismatched function string $2\n"; | ||
543 | $ftrans{$1} = $2; | ||
544 | } | ||
545 | } | ||
458 | } | 546 | } |
459 | close(IN); | 547 | close(IN); |
460 | } | 548 | } |
461 | 549 | ||
550 | |||
462 | my $hincf; | 551 | my $hincf; |
463 | if($static) { | 552 | if($static) { |
464 | $hfile =~ /([^\/]+)$/; | 553 | $hfile =~ /([^\/]+)$/; |
465 | $hincf = "<openssl/$1>"; | 554 | $hincf = "<${hprefix}$1>"; |
466 | } else { | 555 | } else { |
467 | $hincf = "\"$hfile\""; | 556 | $hincf = "\"$hfile\""; |
468 | } | 557 | } |
@@ -487,7 +576,7 @@ EOF | |||
487 | print OUT <<"EOF"; | 576 | print OUT <<"EOF"; |
488 | /* $cfile */ | 577 | /* $cfile */ |
489 | /* ==================================================================== | 578 | /* ==================================================================== |
490 | * Copyright (c) 1999-2008 The OpenSSL Project. All rights reserved. | 579 | * Copyright (c) 1999-2010 The OpenSSL Project. All rights reserved. |
491 | * | 580 | * |
492 | * Redistribution and use in source and binary forms, with or without | 581 | * Redistribution and use in source and binary forms, with or without |
493 | * modification, are permitted provided that the following conditions | 582 | * modification, are permitted provided that the following conditions |
@@ -713,3 +802,9 @@ if($debug && defined(@runref) ) { | |||
713 | print STDERR "$_\n"; | 802 | print STDERR "$_\n"; |
714 | } | 803 | } |
715 | } | 804 | } |
805 | |||
806 | if($errcount) { | ||
807 | print STDERR "There were errors, failing...\n\n"; | ||
808 | exit $errcount; | ||
809 | } | ||
810 | |||
diff --git a/src/lib/libcrypto/util/mkstack.pl b/src/lib/libcrypto/util/mkstack.pl index 2a968f395f..6a43757c95 100644 --- a/src/lib/libcrypto/util/mkstack.pl +++ b/src/lib/libcrypto/util/mkstack.pl | |||
@@ -21,7 +21,7 @@ while (@ARGV) { | |||
21 | } | 21 | } |
22 | 22 | ||
23 | 23 | ||
24 | @source = (<crypto/*.[ch]>, <crypto/*/*.[ch]>, <ssl/*.[ch]>); | 24 | @source = (<crypto/*.[ch]>, <crypto/*/*.[ch]>, <ssl/*.[ch]>, <apps/*.[ch]>); |
25 | foreach $file (@source) { | 25 | foreach $file (@source) { |
26 | next if -l $file; | 26 | next if -l $file; |
27 | 27 | ||
@@ -31,11 +31,19 @@ foreach $file (@source) { | |||
31 | while(<IN>) { | 31 | while(<IN>) { |
32 | if (/^DECLARE_STACK_OF\(([^)]+)\)/) { | 32 | if (/^DECLARE_STACK_OF\(([^)]+)\)/) { |
33 | push @stacklst, $1; | 33 | push @stacklst, $1; |
34 | } if (/^DECLARE_ASN1_SET_OF\(([^)]+)\)/) { | 34 | } |
35 | if (/^DECLARE_SPECIAL_STACK_OF\(([^,\s]+)\s*,\s*([^>\s]+)\)/) { | ||
36 | push @sstacklst, [$1, $2]; | ||
37 | } | ||
38 | if (/^DECLARE_ASN1_SET_OF\(([^)]+)\)/) { | ||
35 | push @asn1setlst, $1; | 39 | push @asn1setlst, $1; |
36 | } if (/^DECLARE_PKCS12_STACK_OF\(([^)]+)\)/) { | 40 | } |
41 | if (/^DECLARE_PKCS12_STACK_OF\(([^)]+)\)/) { | ||
37 | push @p12stklst, $1; | 42 | push @p12stklst, $1; |
38 | } | 43 | } |
44 | if (/^DECLARE_LHASH_OF\(([^)]+)\)/) { | ||
45 | push @lhashlst, $1; | ||
46 | } | ||
39 | } | 47 | } |
40 | close(IN); | 48 | close(IN); |
41 | } | 49 | } |
@@ -65,7 +73,7 @@ while(<IN>) { | |||
65 | foreach $type_thing (sort @stacklst) { | 73 | foreach $type_thing (sort @stacklst) { |
66 | $new_stackfile .= <<EOF; | 74 | $new_stackfile .= <<EOF; |
67 | 75 | ||
68 | #define sk_${type_thing}_new(st) SKM_sk_new($type_thing, (st)) | 76 | #define sk_${type_thing}_new(cmp) SKM_sk_new($type_thing, (cmp)) |
69 | #define sk_${type_thing}_new_null() SKM_sk_new_null($type_thing) | 77 | #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)) | 78 | #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)) | 79 | #define sk_${type_thing}_num(st) SKM_sk_num($type_thing, (st)) |
@@ -88,6 +96,39 @@ while(<IN>) { | |||
88 | #define sk_${type_thing}_is_sorted(st) SKM_sk_is_sorted($type_thing, (st)) | 96 | #define sk_${type_thing}_is_sorted(st) SKM_sk_is_sorted($type_thing, (st)) |
89 | EOF | 97 | EOF |
90 | } | 98 | } |
99 | |||
100 | foreach $type_thing (sort @sstacklst) { | ||
101 | my $t1 = $type_thing->[0]; | ||
102 | my $t2 = $type_thing->[1]; | ||
103 | $new_stackfile .= <<EOF; | ||
104 | |||
105 | #define sk_${t1}_new(cmp) ((STACK_OF($t1) *)sk_new(CHECKED_SK_CMP_FUNC($t2, cmp))) | ||
106 | #define sk_${t1}_new_null() ((STACK_OF($t1) *)sk_new_null()) | ||
107 | #define sk_${t1}_push(st, val) sk_push(CHECKED_PTR_OF(STACK_OF($t1), st), CHECKED_PTR_OF($t2, val)) | ||
108 | #define sk_${t1}_find(st, val) sk_find(CHECKED_PTR_OF(STACK_OF($t1), st), CHECKED_PTR_OF($t2, val)) | ||
109 | #define sk_${t1}_value(st, i) (($t1)sk_value(CHECKED_PTR_OF(STACK_OF($t1), st), i)) | ||
110 | #define sk_${t1}_num(st) SKM_sk_num($t1, st) | ||
111 | #define sk_${t1}_pop_free(st, free_func) sk_pop_free(CHECKED_PTR_OF(STACK_OF($t1), st), CHECKED_SK_FREE_FUNC2($t1, free_func)) | ||
112 | #define sk_${t1}_insert(st, val, i) sk_insert(CHECKED_PTR_OF(STACK_OF($t1), st), CHECKED_PTR_OF($t2, val), i) | ||
113 | #define sk_${t1}_free(st) SKM_sk_free(${t1}, st) | ||
114 | #define sk_${t1}_set(st, i, val) sk_set((_STACK *)CHECKED_PTR_OF(STACK_OF($t1), st), i, CHECKED_PTR_OF($t2, val)) | ||
115 | #define sk_${t1}_zero(st) SKM_sk_zero($t1, (st)) | ||
116 | #define sk_${t1}_unshift(st, val) sk_unshift((_STACK *)CHECKED_PTR_OF(STACK_OF($t1), st), CHECKED_PTR_OF($t2, val)) | ||
117 | #define sk_${t1}_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF($t1), st), CHECKED_CONST_PTR_OF($t2, val)) | ||
118 | #define sk_${t1}_delete(st, i) SKM_sk_delete($t1, (st), (i)) | ||
119 | #define sk_${t1}_delete_ptr(st, ptr) ($t1 *)sk_delete_ptr((_STACK *)CHECKED_PTR_OF(STACK_OF($t1), st), CHECKED_PTR_OF($t2, ptr)) | ||
120 | #define sk_${t1}_set_cmp_func(st, cmp) \\ | ||
121 | ((int (*)(const $t2 * const *,const $t2 * const *)) \\ | ||
122 | sk_set_cmp_func((_STACK *)CHECKED_PTR_OF(STACK_OF($t1), st), CHECKED_SK_CMP_FUNC($t2, cmp))) | ||
123 | #define sk_${t1}_dup(st) SKM_sk_dup($t1, st) | ||
124 | #define sk_${t1}_shift(st) SKM_sk_shift($t1, (st)) | ||
125 | #define sk_${t1}_pop(st) ($t2 *)sk_pop((_STACK *)CHECKED_PTR_OF(STACK_OF($t1), st)) | ||
126 | #define sk_${t1}_sort(st) SKM_sk_sort($t1, (st)) | ||
127 | #define sk_${t1}_is_sorted(st) SKM_sk_is_sorted($t1, (st)) | ||
128 | |||
129 | EOF | ||
130 | } | ||
131 | |||
91 | foreach $type_thing (sort @asn1setlst) { | 132 | foreach $type_thing (sort @asn1setlst) { |
92 | $new_stackfile .= <<EOF; | 133 | $new_stackfile .= <<EOF; |
93 | 134 | ||
@@ -108,6 +149,31 @@ EOF | |||
108 | SKM_PKCS12_decrypt_d2i($type_thing, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) | 149 | SKM_PKCS12_decrypt_d2i($type_thing, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) |
109 | EOF | 150 | EOF |
110 | } | 151 | } |
152 | |||
153 | foreach $type_thing (sort @lhashlst) { | ||
154 | my $lc_tt = lc $type_thing; | ||
155 | $new_stackfile .= <<EOF; | ||
156 | |||
157 | #define lh_${type_thing}_new() LHM_lh_new(${type_thing},${lc_tt}) | ||
158 | #define lh_${type_thing}_insert(lh,inst) LHM_lh_insert(${type_thing},lh,inst) | ||
159 | #define lh_${type_thing}_retrieve(lh,inst) LHM_lh_retrieve(${type_thing},lh,inst) | ||
160 | #define lh_${type_thing}_delete(lh,inst) LHM_lh_delete(${type_thing},lh,inst) | ||
161 | #define lh_${type_thing}_doall(lh,fn) LHM_lh_doall(${type_thing},lh,fn) | ||
162 | #define lh_${type_thing}_doall_arg(lh,fn,arg_type,arg) \\ | ||
163 | LHM_lh_doall_arg(${type_thing},lh,fn,arg_type,arg) | ||
164 | #define lh_${type_thing}_error(lh) LHM_lh_error(${type_thing},lh) | ||
165 | #define lh_${type_thing}_num_items(lh) LHM_lh_num_items(${type_thing},lh) | ||
166 | #define lh_${type_thing}_down_load(lh) LHM_lh_down_load(${type_thing},lh) | ||
167 | #define lh_${type_thing}_node_stats_bio(lh,out) \\ | ||
168 | LHM_lh_node_stats_bio(${type_thing},lh,out) | ||
169 | #define lh_${type_thing}_node_usage_stats_bio(lh,out) \\ | ||
170 | LHM_lh_node_usage_stats_bio(${type_thing},lh,out) | ||
171 | #define lh_${type_thing}_stats_bio(lh,out) \\ | ||
172 | LHM_lh_stats_bio(${type_thing},lh,out) | ||
173 | #define lh_${type_thing}_free(lh) LHM_lh_free(${type_thing},lh) | ||
174 | EOF | ||
175 | } | ||
176 | |||
111 | $new_stackfile .= "/* End of util/mkstack.pl block, you may now edit :-) */\n"; | 177 | $new_stackfile .= "/* End of util/mkstack.pl block, you may now edit :-) */\n"; |
112 | $inside_block = 2; | 178 | $inside_block = 2; |
113 | } | 179 | } |