summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/lhash
diff options
context:
space:
mode:
authordjm <>2010-10-01 22:59:01 +0000
committerdjm <>2010-10-01 22:59:01 +0000
commitfe047d8b632246cb2db3234a0a4f32e5c318857b (patch)
tree939b752540947d33507b3acc48d76a8bfb7c3dc3 /src/lib/libcrypto/lhash
parent2ea67f4aa254b09ded62e6e14fc893bbe6381579 (diff)
downloadopenbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.tar.gz
openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.tar.bz2
openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.zip
resolve conflicts, fix local changes
Diffstat (limited to 'src/lib/libcrypto/lhash')
-rw-r--r--src/lib/libcrypto/lhash/Makefile.ssl93
-rw-r--r--src/lib/libcrypto/lhash/lh_stats.c12
-rw-r--r--src/lib/libcrypto/lhash/lhash.c41
-rw-r--r--src/lib/libcrypto/lhash/lhash.h131
4 files changed, 115 insertions, 162 deletions
diff --git a/src/lib/libcrypto/lhash/Makefile.ssl b/src/lib/libcrypto/lhash/Makefile.ssl
deleted file mode 100644
index 60e7ee3393..0000000000
--- a/src/lib/libcrypto/lhash/Makefile.ssl
+++ /dev/null
@@ -1,93 +0,0 @@
1#
2# SSLeay/crypto/lhash/Makefile
3#
4
5DIR= lhash
6TOP= ../..
7CC= cc
8INCLUDES=
9CFLAG=-g
10INSTALL_PREFIX=
11OPENSSLDIR= /usr/local/ssl
12INSTALLTOP=/usr/local/ssl
13MAKE= make -f Makefile.ssl
14MAKEDEPPROG= makedepend
15MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
16MAKEFILE= Makefile.ssl
17AR= ar r
18
19CFLAGS= $(INCLUDES) $(CFLAG)
20
21GENERAL=Makefile
22TEST=
23APPS=
24
25LIB=$(TOP)/libcrypto.a
26LIBSRC=lhash.c lh_stats.c
27LIBOBJ=lhash.o lh_stats.o
28
29SRC= $(LIBSRC)
30
31EXHEADER= lhash.h
32HEADER= $(EXHEADER)
33
34ALL= $(GENERAL) $(SRC) $(HEADER)
35
36top:
37 (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
38
39all: lib
40
41lib: $(LIBOBJ)
42 $(AR) $(LIB) $(LIBOBJ)
43 $(RANLIB) $(LIB) || echo Never mind.
44 @touch lib
45
46files:
47 $(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
48
49links:
50 @sh $(TOP)/util/point.sh Makefile.ssl Makefile
51 @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
52 @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
53 @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
54
55install:
56 @for i in $(EXHEADER) ; \
57 do \
58 (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
59 chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
60 done;
61
62tags:
63 ctags $(SRC)
64
65tests:
66
67lint:
68 lint -DLINT $(INCLUDES) $(SRC)>fluff
69
70depend:
71 $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
72
73dclean:
74 $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
75 mv -f Makefile.new $(MAKEFILE)
76
77clean:
78 rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
79
80# DO NOT DELETE THIS LINE -- make depend depends on it.
81
82lh_stats.o: ../../e_os.h ../../include/openssl/bio.h
83lh_stats.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
84lh_stats.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
85lh_stats.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
86lh_stats.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
87lh_stats.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
88lh_stats.o: ../cryptlib.h lh_stats.c
89lhash.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
90lhash.o: ../../include/openssl/e_os2.h ../../include/openssl/lhash.h
91lhash.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
92lhash.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
93lhash.o: ../../include/openssl/symhacks.h lhash.c
diff --git a/src/lib/libcrypto/lhash/lh_stats.c b/src/lib/libcrypto/lhash/lh_stats.c
index 5aa7766aa6..815615e338 100644
--- a/src/lib/libcrypto/lhash/lh_stats.c
+++ b/src/lib/libcrypto/lhash/lh_stats.c
@@ -139,7 +139,7 @@ void lh_node_usage_stats(LHASH *lh, FILE *out)
139#else 139#else
140 140
141#ifndef OPENSSL_NO_FP_API 141#ifndef OPENSSL_NO_FP_API
142void lh_stats(const LHASH *lh, FILE *fp) 142void lh_stats(const _LHASH *lh, FILE *fp)
143 { 143 {
144 BIO *bp; 144 BIO *bp;
145 145
@@ -151,7 +151,7 @@ void lh_stats(const LHASH *lh, FILE *fp)
151end:; 151end:;
152 } 152 }
153 153
154void lh_node_stats(const LHASH *lh, FILE *fp) 154void lh_node_stats(const _LHASH *lh, FILE *fp)
155 { 155 {
156 BIO *bp; 156 BIO *bp;
157 157
@@ -163,7 +163,7 @@ void lh_node_stats(const LHASH *lh, FILE *fp)
163end:; 163end:;
164 } 164 }
165 165
166void lh_node_usage_stats(const LHASH *lh, FILE *fp) 166void lh_node_usage_stats(const _LHASH *lh, FILE *fp)
167 { 167 {
168 BIO *bp; 168 BIO *bp;
169 169
@@ -177,7 +177,7 @@ end:;
177 177
178#endif 178#endif
179 179
180void lh_stats_bio(const LHASH *lh, BIO *out) 180void lh_stats_bio(const _LHASH *lh, BIO *out)
181 { 181 {
182 BIO_printf(out,"num_items = %lu\n",lh->num_items); 182 BIO_printf(out,"num_items = %lu\n",lh->num_items);
183 BIO_printf(out,"num_nodes = %u\n",lh->num_nodes); 183 BIO_printf(out,"num_nodes = %u\n",lh->num_nodes);
@@ -205,7 +205,7 @@ void lh_stats_bio(const LHASH *lh, BIO *out)
205#endif 205#endif
206 } 206 }
207 207
208void lh_node_stats_bio(const LHASH *lh, BIO *out) 208void lh_node_stats_bio(const _LHASH *lh, BIO *out)
209 { 209 {
210 LHASH_NODE *n; 210 LHASH_NODE *n;
211 unsigned int i,num; 211 unsigned int i,num;
@@ -218,7 +218,7 @@ void lh_node_stats_bio(const LHASH *lh, BIO *out)
218 } 218 }
219 } 219 }
220 220
221void lh_node_usage_stats_bio(const LHASH *lh, BIO *out) 221void lh_node_usage_stats_bio(const _LHASH *lh, BIO *out)
222 { 222 {
223 LHASH_NODE *n; 223 LHASH_NODE *n;
224 unsigned long num; 224 unsigned long num;
diff --git a/src/lib/libcrypto/lhash/lhash.c b/src/lib/libcrypto/lhash/lhash.c
index 04ea80203c..47f748081b 100644
--- a/src/lib/libcrypto/lhash/lhash.c
+++ b/src/lib/libcrypto/lhash/lhash.c
@@ -107,18 +107,18 @@ const char lh_version[]="lhash" OPENSSL_VERSION_PTEXT;
107#define UP_LOAD (2*LH_LOAD_MULT) /* load times 256 (default 2) */ 107#define UP_LOAD (2*LH_LOAD_MULT) /* load times 256 (default 2) */
108#define DOWN_LOAD (LH_LOAD_MULT) /* load times 256 (default 1) */ 108#define DOWN_LOAD (LH_LOAD_MULT) /* load times 256 (default 1) */
109 109
110static void expand(LHASH *lh); 110static void expand(_LHASH *lh);
111static void contract(LHASH *lh); 111static void contract(_LHASH *lh);
112static LHASH_NODE **getrn(LHASH *lh, const void *data, unsigned long *rhash); 112static LHASH_NODE **getrn(_LHASH *lh, const void *data, unsigned long *rhash);
113 113
114LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c) 114_LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c)
115 { 115 {
116 LHASH *ret; 116 _LHASH *ret;
117 int i; 117 int i;
118 118
119 if ((ret=(LHASH *)OPENSSL_malloc(sizeof(LHASH))) == NULL) 119 if ((ret=OPENSSL_malloc(sizeof(_LHASH))) == NULL)
120 goto err0; 120 goto err0;
121 if ((ret->b=(LHASH_NODE **)OPENSSL_malloc(sizeof(LHASH_NODE *)*MIN_NODES)) == NULL) 121 if ((ret->b=OPENSSL_malloc(sizeof(LHASH_NODE *)*MIN_NODES)) == NULL)
122 goto err1; 122 goto err1;
123 for (i=0; i<MIN_NODES; i++) 123 for (i=0; i<MIN_NODES; i++)
124 ret->b[i]=NULL; 124 ret->b[i]=NULL;
@@ -154,7 +154,7 @@ err0:
154 return(NULL); 154 return(NULL);
155 } 155 }
156 156
157void lh_free(LHASH *lh) 157void lh_free(_LHASH *lh)
158 { 158 {
159 unsigned int i; 159 unsigned int i;
160 LHASH_NODE *n,*nn; 160 LHASH_NODE *n,*nn;
@@ -176,7 +176,7 @@ void lh_free(LHASH *lh)
176 OPENSSL_free(lh); 176 OPENSSL_free(lh);
177 } 177 }
178 178
179void *lh_insert(LHASH *lh, void *data) 179void *lh_insert(_LHASH *lh, void *data)
180 { 180 {
181 unsigned long hash; 181 unsigned long hash;
182 LHASH_NODE *nn,**rn; 182 LHASH_NODE *nn,**rn;
@@ -214,7 +214,7 @@ void *lh_insert(LHASH *lh, void *data)
214 return(ret); 214 return(ret);
215 } 215 }
216 216
217void *lh_delete(LHASH *lh, const void *data) 217void *lh_delete(_LHASH *lh, const void *data)
218 { 218 {
219 unsigned long hash; 219 unsigned long hash;
220 LHASH_NODE *nn,**rn; 220 LHASH_NODE *nn,**rn;
@@ -245,7 +245,7 @@ void *lh_delete(LHASH *lh, const void *data)
245 return(ret); 245 return(ret);
246 } 246 }
247 247
248void *lh_retrieve(LHASH *lh, const void *data) 248void *lh_retrieve(_LHASH *lh, const void *data)
249 { 249 {
250 unsigned long hash; 250 unsigned long hash;
251 LHASH_NODE **rn; 251 LHASH_NODE **rn;
@@ -267,12 +267,15 @@ void *lh_retrieve(LHASH *lh, const void *data)
267 return(ret); 267 return(ret);
268 } 268 }
269 269
270static void doall_util_fn(LHASH *lh, int use_arg, LHASH_DOALL_FN_TYPE func, 270static void doall_util_fn(_LHASH *lh, int use_arg, LHASH_DOALL_FN_TYPE func,
271 LHASH_DOALL_ARG_FN_TYPE func_arg, void *arg) 271 LHASH_DOALL_ARG_FN_TYPE func_arg, void *arg)
272 { 272 {
273 int i; 273 int i;
274 LHASH_NODE *a,*n; 274 LHASH_NODE *a,*n;
275 275
276 if (lh == NULL)
277 return;
278
276 /* reverse the order so we search from 'top to bottom' 279 /* reverse the order so we search from 'top to bottom'
277 * We were having memory leaks otherwise */ 280 * We were having memory leaks otherwise */
278 for (i=lh->num_nodes-1; i>=0; i--) 281 for (i=lh->num_nodes-1; i>=0; i--)
@@ -282,6 +285,8 @@ static void doall_util_fn(LHASH *lh, int use_arg, LHASH_DOALL_FN_TYPE func,
282 { 285 {
283 /* 28/05/91 - eay - n added so items can be deleted 286 /* 28/05/91 - eay - n added so items can be deleted
284 * via lh_doall */ 287 * via lh_doall */
288 /* 22/05/08 - ben - eh? since a is not passed,
289 * this should not be needed */
285 n=a->next; 290 n=a->next;
286 if(use_arg) 291 if(use_arg)
287 func_arg(a->data,arg); 292 func_arg(a->data,arg);
@@ -292,17 +297,17 @@ static void doall_util_fn(LHASH *lh, int use_arg, LHASH_DOALL_FN_TYPE func,
292 } 297 }
293 } 298 }
294 299
295void lh_doall(LHASH *lh, LHASH_DOALL_FN_TYPE func) 300void lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func)
296 { 301 {
297 doall_util_fn(lh, 0, func, (LHASH_DOALL_ARG_FN_TYPE)0, NULL); 302 doall_util_fn(lh, 0, func, (LHASH_DOALL_ARG_FN_TYPE)0, NULL);
298 } 303 }
299 304
300void lh_doall_arg(LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg) 305void lh_doall_arg(_LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg)
301 { 306 {
302 doall_util_fn(lh, 1, (LHASH_DOALL_FN_TYPE)0, func, arg); 307 doall_util_fn(lh, 1, (LHASH_DOALL_FN_TYPE)0, func, arg);
303 } 308 }
304 309
305static void expand(LHASH *lh) 310static void expand(_LHASH *lh)
306 { 311 {
307 LHASH_NODE **n,**n1,**n2,*np; 312 LHASH_NODE **n,**n1,**n2,*np;
308 unsigned int p,i,j; 313 unsigned int p,i,j;
@@ -358,7 +363,7 @@ static void expand(LHASH *lh)
358 } 363 }
359 } 364 }
360 365
361static void contract(LHASH *lh) 366static void contract(_LHASH *lh)
362 { 367 {
363 LHASH_NODE **n,*n1,*np; 368 LHASH_NODE **n,*n1,*np;
364 369
@@ -397,7 +402,7 @@ static void contract(LHASH *lh)
397 } 402 }
398 } 403 }
399 404
400static LHASH_NODE **getrn(LHASH *lh, const void *data, unsigned long *rhash) 405static LHASH_NODE **getrn(_LHASH *lh, const void *data, unsigned long *rhash)
401 { 406 {
402 LHASH_NODE **ret,*n1; 407 LHASH_NODE **ret,*n1;
403 unsigned long hash,nn; 408 unsigned long hash,nn;
@@ -464,7 +469,7 @@ unsigned long lh_strhash(const char *c)
464 return((ret>>16)^ret); 469 return((ret>>16)^ret);
465 } 470 }
466 471
467unsigned long lh_num_items(const LHASH *lh) 472unsigned long lh_num_items(const _LHASH *lh)
468 { 473 {
469 return lh ? lh->num_items : 0; 474 return lh ? lh->num_items : 0;
470 } 475 }
diff --git a/src/lib/libcrypto/lhash/lhash.h b/src/lib/libcrypto/lhash/lhash.h
index d392d0cd80..e7d8763591 100644
--- a/src/lib/libcrypto/lhash/lhash.h
+++ b/src/lib/libcrypto/lhash/lhash.h
@@ -98,42 +98,42 @@ typedef void (*LHASH_DOALL_ARG_FN_TYPE)(void *, void *);
98 * macros if the functions are strictly internal. */ 98 * macros if the functions are strictly internal. */
99 99
100/* First: "hash" functions */ 100/* First: "hash" functions */
101#define DECLARE_LHASH_HASH_FN(f_name,o_type) \ 101#define DECLARE_LHASH_HASH_FN(name, o_type) \
102 unsigned long f_name##_LHASH_HASH(const void *); 102 unsigned long name##_LHASH_HASH(const void *);
103#define IMPLEMENT_LHASH_HASH_FN(f_name,o_type) \ 103#define IMPLEMENT_LHASH_HASH_FN(name, o_type) \
104 unsigned long f_name##_LHASH_HASH(const void *arg) { \ 104 unsigned long name##_LHASH_HASH(const void *arg) { \
105 o_type a = (o_type)arg; \ 105 const o_type *a = arg; \
106 return f_name(a); } 106 return name##_hash(a); }
107#define LHASH_HASH_FN(f_name) f_name##_LHASH_HASH 107#define LHASH_HASH_FN(name) name##_LHASH_HASH
108 108
109/* Second: "compare" functions */ 109/* Second: "compare" functions */
110#define DECLARE_LHASH_COMP_FN(f_name,o_type) \ 110#define DECLARE_LHASH_COMP_FN(name, o_type) \
111 int f_name##_LHASH_COMP(const void *, const void *); 111 int name##_LHASH_COMP(const void *, const void *);
112#define IMPLEMENT_LHASH_COMP_FN(f_name,o_type) \ 112#define IMPLEMENT_LHASH_COMP_FN(name, o_type) \
113 int f_name##_LHASH_COMP(const void *arg1, const void *arg2) { \ 113 int name##_LHASH_COMP(const void *arg1, const void *arg2) { \
114 o_type a = (o_type)arg1; \ 114 const o_type *a = arg1; \
115 o_type b = (o_type)arg2; \ 115 const o_type *b = arg2; \
116 return f_name(a,b); } 116 return name##_cmp(a,b); }
117#define LHASH_COMP_FN(f_name) f_name##_LHASH_COMP 117#define LHASH_COMP_FN(name) name##_LHASH_COMP
118 118
119/* Third: "doall" functions */ 119/* Third: "doall" functions */
120#define DECLARE_LHASH_DOALL_FN(f_name,o_type) \ 120#define DECLARE_LHASH_DOALL_FN(name, o_type) \
121 void f_name##_LHASH_DOALL(void *); 121 void name##_LHASH_DOALL(void *);
122#define IMPLEMENT_LHASH_DOALL_FN(f_name,o_type) \ 122#define IMPLEMENT_LHASH_DOALL_FN(name, o_type) \
123 void f_name##_LHASH_DOALL(void *arg) { \ 123 void name##_LHASH_DOALL(void *arg) { \
124 o_type a = (o_type)arg; \ 124 o_type *a = arg; \
125 f_name(a); } 125 name##_doall(a); }
126#define LHASH_DOALL_FN(f_name) f_name##_LHASH_DOALL 126#define LHASH_DOALL_FN(name) name##_LHASH_DOALL
127 127
128/* Fourth: "doall_arg" functions */ 128/* Fourth: "doall_arg" functions */
129#define DECLARE_LHASH_DOALL_ARG_FN(f_name,o_type,a_type) \ 129#define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \
130 void f_name##_LHASH_DOALL_ARG(void *, void *); 130 void name##_LHASH_DOALL_ARG(void *, void *);
131#define IMPLEMENT_LHASH_DOALL_ARG_FN(f_name,o_type,a_type) \ 131#define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \
132 void f_name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ 132 void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \
133 o_type a = (o_type)arg1; \ 133 o_type *a = arg1; \
134 a_type b = (a_type)arg2; \ 134 a_type *b = arg2; \
135 f_name(a,b); } 135 name##_doall_arg(a, b); }
136#define LHASH_DOALL_ARG_FN(f_name) f_name##_LHASH_DOALL_ARG 136#define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG
137 137
138typedef struct lhash_st 138typedef struct lhash_st
139 { 139 {
@@ -163,7 +163,8 @@ typedef struct lhash_st
163 unsigned long num_hash_comps; 163 unsigned long num_hash_comps;
164 164
165 int error; 165 int error;
166 } LHASH; 166 } _LHASH; /* Do not use _LHASH directly, use LHASH_OF
167 * and friends */
167 168
168#define LH_LOAD_MULT 256 169#define LH_LOAD_MULT 256
169 170
@@ -171,27 +172,67 @@ typedef struct lhash_st
171 * in lh_insert(). */ 172 * in lh_insert(). */
172#define lh_error(lh) ((lh)->error) 173#define lh_error(lh) ((lh)->error)
173 174
174LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c); 175_LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c);
175void lh_free(LHASH *lh); 176void lh_free(_LHASH *lh);
176void *lh_insert(LHASH *lh, void *data); 177void *lh_insert(_LHASH *lh, void *data);
177void *lh_delete(LHASH *lh, const void *data); 178void *lh_delete(_LHASH *lh, const void *data);
178void *lh_retrieve(LHASH *lh, const void *data); 179void *lh_retrieve(_LHASH *lh, const void *data);
179void lh_doall(LHASH *lh, LHASH_DOALL_FN_TYPE func); 180void lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func);
180void lh_doall_arg(LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg); 181void lh_doall_arg(_LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg);
181unsigned long lh_strhash(const char *c); 182unsigned long lh_strhash(const char *c);
182unsigned long lh_num_items(const LHASH *lh); 183unsigned long lh_num_items(const _LHASH *lh);
183 184
184#ifndef OPENSSL_NO_FP_API 185#ifndef OPENSSL_NO_FP_API
185void lh_stats(const LHASH *lh, FILE *out); 186void lh_stats(const _LHASH *lh, FILE *out);
186void lh_node_stats(const LHASH *lh, FILE *out); 187void lh_node_stats(const _LHASH *lh, FILE *out);
187void lh_node_usage_stats(const LHASH *lh, FILE *out); 188void lh_node_usage_stats(const _LHASH *lh, FILE *out);
188#endif 189#endif
189 190
190#ifndef OPENSSL_NO_BIO 191#ifndef OPENSSL_NO_BIO
191void lh_stats_bio(const LHASH *lh, BIO *out); 192void lh_stats_bio(const _LHASH *lh, BIO *out);
192void lh_node_stats_bio(const LHASH *lh, BIO *out); 193void lh_node_stats_bio(const _LHASH *lh, BIO *out);
193void lh_node_usage_stats_bio(const LHASH *lh, BIO *out); 194void lh_node_usage_stats_bio(const _LHASH *lh, BIO *out);
194#endif 195#endif
196
197/* Type checking... */
198
199#define LHASH_OF(type) struct lhash_st_##type
200
201#define DECLARE_LHASH_OF(type) LHASH_OF(type) { int dummy; }
202
203#define CHECKED_LHASH_OF(type,lh) \
204 ((_LHASH *)CHECKED_PTR_OF(LHASH_OF(type),lh))
205
206/* Define wrapper functions. */
207#define LHM_lh_new(type, name) \
208 ((LHASH_OF(type) *)lh_new(LHASH_HASH_FN(name), LHASH_COMP_FN(name)))
209#define LHM_lh_error(type, lh) \
210 lh_error(CHECKED_LHASH_OF(type,lh))
211#define LHM_lh_insert(type, lh, inst) \
212 ((type *)lh_insert(CHECKED_LHASH_OF(type, lh), \
213 CHECKED_PTR_OF(type, inst)))
214#define LHM_lh_retrieve(type, lh, inst) \
215 ((type *)lh_retrieve(CHECKED_LHASH_OF(type, lh), \
216 CHECKED_PTR_OF(type, inst)))
217#define LHM_lh_delete(type, lh, inst) \
218 ((type *)lh_delete(CHECKED_LHASH_OF(type, lh), \
219 CHECKED_PTR_OF(type, inst)))
220#define LHM_lh_doall(type, lh,fn) lh_doall(CHECKED_LHASH_OF(type, lh), fn)
221#define LHM_lh_doall_arg(type, lh, fn, arg_type, arg) \
222 lh_doall_arg(CHECKED_LHASH_OF(type, lh), fn, CHECKED_PTR_OF(arg_type, arg))
223#define LHM_lh_num_items(type, lh) lh_num_items(CHECKED_LHASH_OF(type, lh))
224#define LHM_lh_down_load(type, lh) (CHECKED_LHASH_OF(type, lh)->down_load)
225#define LHM_lh_node_stats_bio(type, lh, out) \
226 lh_node_stats_bio(CHECKED_LHASH_OF(type, lh), out)
227#define LHM_lh_node_usage_stats_bio(type, lh, out) \
228 lh_node_usage_stats_bio(CHECKED_LHASH_OF(type, lh), out)
229#define LHM_lh_stats_bio(type, lh, out) \
230 lh_stats_bio(CHECKED_LHASH_OF(type, lh), out)
231#define LHM_lh_free(type, lh) lh_free(CHECKED_LHASH_OF(type, lh))
232
233DECLARE_LHASH_OF(OPENSSL_STRING);
234DECLARE_LHASH_OF(OPENSSL_CSTRING);
235
195#ifdef __cplusplus 236#ifdef __cplusplus
196} 237}
197#endif 238#endif