diff options
author | Richard Levitte <levitte@openssl.org> | 2003-04-29 20:30:55 +0000 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2003-04-29 20:30:55 +0000 |
commit | 26851b6b42260bdfd5c5b8332b5d3d00fa60f3df (patch) | |
tree | 51c96a33290a9ff033a89936bbad64770edfaf0a /crypto/stack/stack.c | |
parent | ea5240a5edceccc6c6410a56b68ec4d8038da4bb (diff) |
Add an extended variant of sk_find() which returns a non-NULL pointer
even if an exact match wasn't found.
Diffstat (limited to 'crypto/stack/stack.c')
-rw-r--r-- | crypto/stack/stack.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/crypto/stack/stack.c b/crypto/stack/stack.c index 2496f28a8c..98a3eeee64 100644 --- a/crypto/stack/stack.c +++ b/crypto/stack/stack.c @@ -210,7 +210,7 @@ char *sk_delete(STACK *st, int loc) return(ret); } -int sk_find(STACK *st, char *data) +static int internal_find(STACK *st, char *data, int ret_val_options) { char **r; int i; @@ -233,19 +233,19 @@ int sk_find(STACK *st, char *data) * not (type *) pointers, but the *pointers* to (type *) pointers, * so we get our extra level of pointer dereferencing that way. */ comp_func=(int (*)(const void *,const void *))(st->comp); - r=(char **)bsearch(&data,(char *)st->data, - st->num,sizeof(char *), comp_func); + r=(char **)OBJ_bsearch(&data,(char *)st->data, + st->num,sizeof(char *),comp_func,ret_val_options); if (r == NULL) return(-1); - i=(int)(r-st->data); - for ( ; i>0; i--) - /* This needs a cast because the type being pointed to from - * the "&" expressions are (char *) rather than (const char *). - * For an explanation, read: - * http://www.eskimo.com/~scs/C-faq/q11.10.html :-) */ - if ((*st->comp)((const char * const *)&(st->data[i-1]), - (const char * const *)&data) < 0) - break; - return(i); + return((int)(r-st->data)); + } + +int sk_find(STACK *st, char *data) + { + return internal_find(st, data, OBJ_BSEARCH_FIRST_VALUE_ON_MATCH); + } +int sk_find_ex(STACK *st, char *data) + { + return internal_find(st, data, OBJ_BSEARCH_VALUE_ON_NOMATCH); } int sk_push(STACK *st, char *data) |