# $Id$ # # Tool to write search C source code for "DECLARE_STACK_OF" macro # calls and write corresponding type-safe "safestack" macros. # # You might want to look away now, this is nasty. Then again, OpenSSL # does the same thing, but in Perl, and mixing automatically generated # code with code maintained by humans, so "nasty" is a relative term. # # Copyright (C) 2011-2012 Internet Systems Consortium ("ISC") # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH # REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. import fileinput import sys import re header = '''\ /* * Automatically generated, do not edit. * Generator $Id$ */ #ifndef __%__DEFSTACK_H__ #define __%__DEFSTACK_H__ ''' footer = ''' #endif /* __%__DEFSTACK_H__ */ ''' template = ''' /* * Safestack macros for %. */ #define sk_%_new(st) SKM_sk_new(%, (st)) #define sk_%_new_null() SKM_sk_new_null(%) #define sk_%_free(st) SKM_sk_free(%, (st)) #define sk_%_num(st) SKM_sk_num(%, (st)) #define sk_%_value(st, i) SKM_sk_value(%, (st), (i)) #define sk_%_set(st, i, val) SKM_sk_set(%, (st), (i), (val)) #define sk_%_zero(st) SKM_sk_zero(%, (st)) #define sk_%_push(st, val) SKM_sk_push(%, (st), (val)) #define sk_%_unshift(st, val) SKM_sk_unshift(%, (st), (val)) #define sk_%_find(st, val) SKM_sk_find(%, (st), (val)) #define sk_%_find_ex(st, val) SKM_sk_find_ex(%, (st), (val)) #define sk_%_delete(st, i) SKM_sk_delete(%, (st), (i)) #define sk_%_delete_ptr(st, ptr) SKM_sk_delete_ptr(%, (st), (ptr)) #define sk_%_insert(st, val, i) SKM_sk_insert(%, (st), (val), (i)) #define sk_%_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(%, (st), (cmp)) #define sk_%_dup(st) SKM_sk_dup(%, st) #define sk_%_pop_free(st, free_func) SKM_sk_pop_free(%, (st), (free_func)) #define sk_%_shift(st) SKM_sk_shift(%, (st)) #define sk_%_pop(st) SKM_sk_pop(%, (st)) #define sk_%_sort(st) SKM_sk_sort(%, (st)) #define sk_%_is_sorted(st) SKM_sk_is_sorted(%, (st)) ''' if len(sys.argv) < 2: sys.exit("Usage: %s source.c [source.c ...]" % sys.argv[0]) splitter = re.compile("[() \t]+").split token = None for line in fileinput.input(): if token is None: token = "".join(c if c.isalnum() else "_" for c in fileinput.filename().upper()) sys.stdout.write(header.replace("%", token)) if "DECLARE_STACK_OF" in line: words = splitter(line) if len(words) > 1 and words[0] == "DECLARE_STACK_OF": sys.stdout.write(template.replace("%", words[1])) if token is not None: sys.stdout.write(footer.replace("%", token)) net/commit/scripts/gc_summary.py?id=387f1d8f60059da68270189325956fac5306abf7'>387f1d8f
d45a725d





a8cadbfd
e843013b
d45a725d



387f1d8f
d45a725d




387f1d8f
d45a725d











387f1d8f
d45a725d




a8cadbfd


e843013b
d45a725d
bb175d89
387f1d8f

bb175d89

387f1d8f
d45a725d


6ed89c99
d45a725d





387f1d8f
d45a725d












387f1d8f
d45a725d




d45a725d
387f1d8f
d45a725d
387f1d8f








d45a725d
387f1d8f
d45a725d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112