summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/stack/stack.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/stack/stack.c')
-rw-r--r--src/lib/libcrypto/stack/stack.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/src/lib/libcrypto/stack/stack.c b/src/lib/libcrypto/stack/stack.c
index 378bd7c796..c7173eb6ab 100644
--- a/src/lib/libcrypto/stack/stack.c
+++ b/src/lib/libcrypto/stack/stack.c
@@ -68,12 +68,11 @@
68#include <stdio.h> 68#include <stdio.h>
69#include "cryptlib.h" 69#include "cryptlib.h"
70#include <openssl/stack.h> 70#include <openssl/stack.h>
71#include <openssl/objects.h>
72 71
73#undef MIN_NODES 72#undef MIN_NODES
74#define MIN_NODES 4 73#define MIN_NODES 4
75 74
76const char STACK_version[]="Stack" OPENSSL_VERSION_PTEXT; 75const char *STACK_version="Stack" OPENSSL_VERSION_PTEXT;
77 76
78#include <errno.h> 77#include <errno.h>
79 78
@@ -210,7 +209,7 @@ char *sk_delete(STACK *st, int loc)
210 return(ret); 209 return(ret);
211 } 210 }
212 211
213static int internal_find(STACK *st, char *data, int ret_val_options) 212int sk_find(STACK *st, char *data)
214 { 213 {
215 char **r; 214 char **r;
216 int i; 215 int i;
@@ -233,19 +232,19 @@ static int internal_find(STACK *st, char *data, int ret_val_options)
233 * not (type *) pointers, but the *pointers* to (type *) pointers, 232 * not (type *) pointers, but the *pointers* to (type *) pointers,
234 * so we get our extra level of pointer dereferencing that way. */ 233 * so we get our extra level of pointer dereferencing that way. */
235 comp_func=(int (*)(const void *,const void *))(st->comp); 234 comp_func=(int (*)(const void *,const void *))(st->comp);
236 r=(char **)OBJ_bsearch_ex((char *)&data,(char *)st->data, 235 r=(char **)bsearch(&data,(char *)st->data,
237 st->num,sizeof(char *),comp_func,ret_val_options); 236 st->num,sizeof(char *), comp_func);
238 if (r == NULL) return(-1); 237 if (r == NULL) return(-1);
239 return((int)(r-st->data)); 238 i=(int)(r-st->data);
240 } 239 for ( ; i>0; i--)
241 240 /* This needs a cast because the type being pointed to from
242int sk_find(STACK *st, char *data) 241 * the "&" expressions are (char *) rather than (const char *).
243 { 242 * For an explanation, read:
244 return internal_find(st, data, OBJ_BSEARCH_FIRST_VALUE_ON_MATCH); 243 * http://www.eskimo.com/~scs/C-faq/q11.10.html :-) */
245 } 244 if ((*st->comp)((const char * const *)&(st->data[i-1]),
246int sk_find_ex(STACK *st, char *data) 245 (const char * const *)&data) < 0)
247 { 246 break;
248 return internal_find(st, data, OBJ_BSEARCH_VALUE_ON_NOMATCH); 247 return(i);
249 } 248 }
250 249
251int sk_push(STACK *st, char *data) 250int sk_push(STACK *st, char *data)