summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/txt_db/txt_db.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/txt_db/txt_db.c')
-rw-r--r--src/lib/libcrypto/txt_db/txt_db.c76
1 files changed, 39 insertions, 37 deletions
diff --git a/src/lib/libcrypto/txt_db/txt_db.c b/src/lib/libcrypto/txt_db/txt_db.c
index 3ed5f72ee9..6f2ce3b5a4 100644
--- a/src/lib/libcrypto/txt_db/txt_db.c
+++ b/src/lib/libcrypto/txt_db/txt_db.c
@@ -77,22 +77,23 @@ TXT_DB *TXT_DB_read(BIO *in, int num)
77 int i,add,n; 77 int i,add,n;
78 int size=BUFSIZE; 78 int size=BUFSIZE;
79 int offset=0; 79 int offset=0;
80 char *p,**pp,*f; 80 char *p,*f;
81 OPENSSL_STRING *pp;
81 BUF_MEM *buf=NULL; 82 BUF_MEM *buf=NULL;
82 83
83 if ((buf=BUF_MEM_new()) == NULL) goto err; 84 if ((buf=BUF_MEM_new()) == NULL) goto err;
84 if (!BUF_MEM_grow(buf,size)) goto err; 85 if (!BUF_MEM_grow(buf,size)) goto err;
85 86
86 if ((ret=(TXT_DB *)OPENSSL_malloc(sizeof(TXT_DB))) == NULL) 87 if ((ret=OPENSSL_malloc(sizeof(TXT_DB))) == NULL)
87 goto err; 88 goto err;
88 ret->num_fields=num; 89 ret->num_fields=num;
89 ret->index=NULL; 90 ret->index=NULL;
90 ret->qual=NULL; 91 ret->qual=NULL;
91 if ((ret->data=sk_new_null()) == NULL) 92 if ((ret->data=sk_OPENSSL_PSTRING_new_null()) == NULL)
92 goto err; 93 goto err;
93 if ((ret->index=(LHASH **)OPENSSL_malloc(sizeof(LHASH *)*num)) == NULL) 94 if ((ret->index=OPENSSL_malloc(sizeof(*ret->index)*num)) == NULL)
94 goto err; 95 goto err;
95 if ((ret->qual=(int (**)(char **))OPENSSL_malloc(sizeof(int (**)(char **))*num)) == NULL) 96 if ((ret->qual=OPENSSL_malloc(sizeof(*(ret->qual))*num)) == NULL)
96 goto err; 97 goto err;
97 for (i=0; i<num; i++) 98 for (i=0; i<num; i++)
98 { 99 {
@@ -122,7 +123,7 @@ TXT_DB *TXT_DB_read(BIO *in, int num)
122 else 123 else
123 { 124 {
124 buf->data[offset-1]='\0'; /* blat the '\n' */ 125 buf->data[offset-1]='\0'; /* blat the '\n' */
125 if (!(p=(char *)OPENSSL_malloc(add+offset))) goto err; 126 if (!(p=OPENSSL_malloc(add+offset))) goto err;
126 offset=0; 127 offset=0;
127 } 128 }
128 pp=(char **)p; 129 pp=(char **)p;
@@ -155,16 +156,16 @@ TXT_DB *TXT_DB_read(BIO *in, int num)
155 *(p++)='\0'; 156 *(p++)='\0';
156 if ((n != num) || (*f != '\0')) 157 if ((n != num) || (*f != '\0'))
157 { 158 {
158#if !defined(OPENSSL_NO_STDIO) && !defined(OPENSSL_SYS_WIN16) /* temporaty fix :-( */ 159#if !defined(OPENSSL_NO_STDIO) && !defined(OPENSSL_SYS_WIN16) /* temporary fix :-( */
159 fprintf(stderr,"wrong number of fields on line %ld (looking for field %d, got %d, '%s' left)\n",ln,num,n,f); 160 fprintf(stderr,"wrong number of fields on line %ld (looking for field %d, got %d, '%s' left)\n",ln,num,n,f);
160#endif 161#endif
161 er=2; 162 er=2;
162 goto err; 163 goto err;
163 } 164 }
164 pp[n]=p; 165 pp[n]=p;
165 if (!sk_push(ret->data,(char *)pp)) 166 if (!sk_OPENSSL_PSTRING_push(ret->data,pp))
166 { 167 {
167#if !defined(OPENSSL_NO_STDIO) && !defined(OPENSSL_SYS_WIN16) /* temporaty fix :-( */ 168#if !defined(OPENSSL_NO_STDIO) && !defined(OPENSSL_SYS_WIN16) /* temporary fix :-( */
168 fprintf(stderr,"failure in sk_push\n"); 169 fprintf(stderr,"failure in sk_push\n");
169#endif 170#endif
170 er=2; 171 er=2;
@@ -181,7 +182,7 @@ err:
181#endif 182#endif
182 if (ret != NULL) 183 if (ret != NULL)
183 { 184 {
184 if (ret->data != NULL) sk_free(ret->data); 185 if (ret->data != NULL) sk_OPENSSL_PSTRING_free(ret->data);
185 if (ret->index != NULL) OPENSSL_free(ret->index); 186 if (ret->index != NULL) OPENSSL_free(ret->index);
186 if (ret->qual != NULL) OPENSSL_free(ret->qual); 187 if (ret->qual != NULL) OPENSSL_free(ret->qual);
187 if (ret != NULL) OPENSSL_free(ret); 188 if (ret != NULL) OPENSSL_free(ret);
@@ -192,10 +193,10 @@ err:
192 return(ret); 193 return(ret);
193 } 194 }
194 195
195char **TXT_DB_get_by_index(TXT_DB *db, int idx, char **value) 196OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, OPENSSL_STRING *value)
196 { 197 {
197 char **ret; 198 OPENSSL_STRING *ret;
198 LHASH *lh; 199 LHASH_OF(OPENSSL_STRING) *lh;
199 200
200 if (idx >= db->num_fields) 201 if (idx >= db->num_fields)
201 { 202 {
@@ -208,16 +209,16 @@ char **TXT_DB_get_by_index(TXT_DB *db, int idx, char **value)
208 db->error=DB_ERROR_NO_INDEX; 209 db->error=DB_ERROR_NO_INDEX;
209 return(NULL); 210 return(NULL);
210 } 211 }
211 ret=(char **)lh_retrieve(lh,value); 212 ret=lh_OPENSSL_STRING_retrieve(lh,value);
212 db->error=DB_ERROR_OK; 213 db->error=DB_ERROR_OK;
213 return(ret); 214 return(ret);
214 } 215 }
215 216
216int TXT_DB_create_index(TXT_DB *db, int field, int (*qual)(char **), 217int TXT_DB_create_index(TXT_DB *db, int field, int (*qual)(OPENSSL_STRING *),
217 LHASH_HASH_FN_TYPE hash, LHASH_COMP_FN_TYPE cmp) 218 LHASH_HASH_FN_TYPE hash, LHASH_COMP_FN_TYPE cmp)
218 { 219 {
219 LHASH *idx; 220 LHASH_OF(OPENSSL_STRING) *idx;
220 char **r; 221 OPENSSL_STRING *r;
221 int i,n; 222 int i,n;
222 223
223 if (field >= db->num_fields) 224 if (field >= db->num_fields)
@@ -225,26 +226,27 @@ int TXT_DB_create_index(TXT_DB *db, int field, int (*qual)(char **),
225 db->error=DB_ERROR_INDEX_OUT_OF_RANGE; 226 db->error=DB_ERROR_INDEX_OUT_OF_RANGE;
226 return(0); 227 return(0);
227 } 228 }
228 if ((idx=lh_new(hash,cmp)) == NULL) 229 /* FIXME: we lose type checking at this point */
230 if ((idx=(LHASH_OF(OPENSSL_STRING) *)lh_new(hash,cmp)) == NULL)
229 { 231 {
230 db->error=DB_ERROR_MALLOC; 232 db->error=DB_ERROR_MALLOC;
231 return(0); 233 return(0);
232 } 234 }
233 n=sk_num(db->data); 235 n=sk_OPENSSL_PSTRING_num(db->data);
234 for (i=0; i<n; i++) 236 for (i=0; i<n; i++)
235 { 237 {
236 r=(char **)sk_value(db->data,i); 238 r=sk_OPENSSL_PSTRING_value(db->data,i);
237 if ((qual != NULL) && (qual(r) == 0)) continue; 239 if ((qual != NULL) && (qual(r) == 0)) continue;
238 if ((r=lh_insert(idx,r)) != NULL) 240 if ((r=lh_OPENSSL_STRING_insert(idx,r)) != NULL)
239 { 241 {
240 db->error=DB_ERROR_INDEX_CLASH; 242 db->error=DB_ERROR_INDEX_CLASH;
241 db->arg1=sk_find(db->data,(char *)r); 243 db->arg1=sk_OPENSSL_PSTRING_find(db->data,r);
242 db->arg2=i; 244 db->arg2=i;
243 lh_free(idx); 245 lh_OPENSSL_STRING_free(idx);
244 return(0); 246 return(0);
245 } 247 }
246 } 248 }
247 if (db->index[field] != NULL) lh_free(db->index[field]); 249 if (db->index[field] != NULL) lh_OPENSSL_STRING_free(db->index[field]);
248 db->index[field]=idx; 250 db->index[field]=idx;
249 db->qual[field]=qual; 251 db->qual[field]=qual;
250 return(1); 252 return(1);
@@ -259,11 +261,11 @@ long TXT_DB_write(BIO *out, TXT_DB *db)
259 261
260 if ((buf=BUF_MEM_new()) == NULL) 262 if ((buf=BUF_MEM_new()) == NULL)
261 goto err; 263 goto err;
262 n=sk_num(db->data); 264 n=sk_OPENSSL_PSTRING_num(db->data);
263 nn=db->num_fields; 265 nn=db->num_fields;
264 for (i=0; i<n; i++) 266 for (i=0; i<n; i++)
265 { 267 {
266 pp=(char **)sk_value(db->data,i); 268 pp=sk_OPENSSL_PSTRING_value(db->data,i);
267 269
268 l=0; 270 l=0;
269 for (j=0; j<nn; j++) 271 for (j=0; j<nn; j++)
@@ -298,10 +300,10 @@ err:
298 return(ret); 300 return(ret);
299 } 301 }
300 302
301int TXT_DB_insert(TXT_DB *db, char **row) 303int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *row)
302 { 304 {
303 int i; 305 int i;
304 char **r; 306 OPENSSL_STRING *r;
305 307
306 for (i=0; i<db->num_fields; i++) 308 for (i=0; i<db->num_fields; i++)
307 { 309 {
@@ -309,7 +311,7 @@ int TXT_DB_insert(TXT_DB *db, char **row)
309 { 311 {
310 if ((db->qual[i] != NULL) && 312 if ((db->qual[i] != NULL) &&
311 (db->qual[i](row) == 0)) continue; 313 (db->qual[i](row) == 0)) continue;
312 r=(char **)lh_retrieve(db->index[i],row); 314 r=lh_OPENSSL_STRING_retrieve(db->index[i],row);
313 if (r != NULL) 315 if (r != NULL)
314 { 316 {
315 db->error=DB_ERROR_INDEX_CLASH; 317 db->error=DB_ERROR_INDEX_CLASH;
@@ -320,7 +322,7 @@ int TXT_DB_insert(TXT_DB *db, char **row)
320 } 322 }
321 } 323 }
322 /* We have passed the index checks, now just append and insert */ 324 /* We have passed the index checks, now just append and insert */
323 if (!sk_push(db->data,(char *)row)) 325 if (!sk_OPENSSL_PSTRING_push(db->data,row))
324 { 326 {
325 db->error=DB_ERROR_MALLOC; 327 db->error=DB_ERROR_MALLOC;
326 goto err; 328 goto err;
@@ -332,7 +334,7 @@ int TXT_DB_insert(TXT_DB *db, char **row)
332 { 334 {
333 if ((db->qual[i] != NULL) && 335 if ((db->qual[i] != NULL) &&
334 (db->qual[i](row) == 0)) continue; 336 (db->qual[i](row) == 0)) continue;
335 lh_insert(db->index[i],row); 337 (void)lh_OPENSSL_STRING_insert(db->index[i],row);
336 } 338 }
337 } 339 }
338 return(1); 340 return(1);
@@ -351,18 +353,18 @@ void TXT_DB_free(TXT_DB *db)
351 if (db->index != NULL) 353 if (db->index != NULL)
352 { 354 {
353 for (i=db->num_fields-1; i>=0; i--) 355 for (i=db->num_fields-1; i>=0; i--)
354 if (db->index[i] != NULL) lh_free(db->index[i]); 356 if (db->index[i] != NULL) lh_OPENSSL_STRING_free(db->index[i]);
355 OPENSSL_free(db->index); 357 OPENSSL_free(db->index);
356 } 358 }
357 if (db->qual != NULL) 359 if (db->qual != NULL)
358 OPENSSL_free(db->qual); 360 OPENSSL_free(db->qual);
359 if (db->data != NULL) 361 if (db->data != NULL)
360 { 362 {
361 for (i=sk_num(db->data)-1; i>=0; i--) 363 for (i=sk_OPENSSL_PSTRING_num(db->data)-1; i>=0; i--)
362 { 364 {
363 /* check if any 'fields' have been allocated 365 /* check if any 'fields' have been allocated
364 * from outside of the initial block */ 366 * from outside of the initial block */
365 p=(char **)sk_value(db->data,i); 367 p=sk_OPENSSL_PSTRING_value(db->data,i);
366 max=p[db->num_fields]; /* last address */ 368 max=p[db->num_fields]; /* last address */
367 if (max == NULL) /* new row */ 369 if (max == NULL) /* new row */
368 { 370 {
@@ -378,9 +380,9 @@ void TXT_DB_free(TXT_DB *db)
378 OPENSSL_free(p[n]); 380 OPENSSL_free(p[n]);
379 } 381 }
380 } 382 }
381 OPENSSL_free(sk_value(db->data,i)); 383 OPENSSL_free(sk_OPENSSL_PSTRING_value(db->data,i));
382 } 384 }
383 sk_free(db->data); 385 sk_OPENSSL_PSTRING_free(db->data);
384 } 386 }
385 OPENSSL_free(db); 387 OPENSSL_free(db);
386 } 388 }