diff options
author | Ben Laurie <ben@openssl.org> | 2008-10-14 08:10:52 +0000 |
---|---|---|
committer | Ben Laurie <ben@openssl.org> | 2008-10-14 08:10:52 +0000 |
commit | 1ea6472e604ed0e411fa41fcb5f242729ee42cd6 (patch) | |
tree | 48d94ac212ab59ca0e17e7c250f5f0f0c063a039 /crypto/stack | |
parent | b8dfde2a362a4a4cb1f102674704972471385a87 (diff) |
Type-safe OBJ_bsearch_ex.
Diffstat (limited to 'crypto/stack')
-rw-r--r-- | crypto/stack/safestack.h | 2 | ||||
-rw-r--r-- | crypto/stack/stack.c | 28 | ||||
-rw-r--r-- | crypto/stack/stack.h | 9 |
3 files changed, 15 insertions, 24 deletions
diff --git a/crypto/stack/safestack.h b/crypto/stack/safestack.h index 9ed5fc21e7..58597c4479 100644 --- a/crypto/stack/safestack.h +++ b/crypto/stack/safestack.h @@ -69,7 +69,7 @@ ((void (*)(void *)) ((1 ? p : (void (*)(type))0))) #define CHECKED_SK_CMP_FUNC(type, p) \ - ((int (*)(const void * const *, const void * const *)) \ + ((int (*)(const void *, const void *)) \ ((1 ? p : (int (*)(const type * const *, const type * const *))0))) #define STACK_OF(type) struct stack_st_##type diff --git a/crypto/stack/stack.c b/crypto/stack/stack.c index a58229a18c..76cf1a1168 100644 --- a/crypto/stack/stack.c +++ b/crypto/stack/stack.c @@ -77,11 +77,10 @@ const char STACK_version[]="Stack" OPENSSL_VERSION_PTEXT; #include <errno.h> -int (*sk_set_cmp_func(_STACK *sk, int (*c)(const void * const *, - const void * const *))) - (const void * const *, const void * const *) +int (*sk_set_cmp_func(_STACK *sk, int (*c)(const void *, const void *))) + (const void *, const void *) { - int (*old)(const void * const *,const void * const *)=sk->comp; + int (*old)(const void *,const void *)=sk->comp; if (sk->comp != c) sk->sorted=0; @@ -115,10 +114,10 @@ err: _STACK *sk_new_null(void) { - return sk_new((int (*)(const void * const *, const void * const *))0); + return sk_new((int (*)(const void *, const void *))0); } -_STACK *sk_new(int (*c)(const void * const *, const void * const *)) +_STACK *sk_new(int (*c)(const void *, const void *)) { _STACK *ret; int i; @@ -213,9 +212,9 @@ void *sk_delete(_STACK *st, int loc) static int internal_find(_STACK *st, void *data, int ret_val_options) { - char **r; + const void * const *r; int i; - int (*comp_func)(const void *,const void *); + if(st == NULL) return -1; if (st->comp == NULL) @@ -227,17 +226,10 @@ static int internal_find(_STACK *st, void *data, int ret_val_options) } sk_sort(st); if (data == NULL) return(-1); - /* This (and the "qsort" below) are the two places in OpenSSL - * where we need to convert from our standard (type **,type **) - * compare callback type to the (void *,void *) type required by - * bsearch. However, the "data" it is being called(back) with are - * 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 **)OBJ_bsearch_ex((char *)&data,(char *)st->data, - st->num,sizeof(char *),comp_func,ret_val_options); + r=OBJ_bsearch_ex_(&data,st->data,st->num,sizeof(void *),st->comp, + ret_val_options); if (r == NULL) return(-1); - return((int)(r-st->data)); + return (int)((char **)r-st->data); } int sk_find(_STACK *st, void *data) diff --git a/crypto/stack/stack.h b/crypto/stack/stack.h index 70f78aa743..ce35e554eb 100644 --- a/crypto/stack/stack.h +++ b/crypto/stack/stack.h @@ -70,7 +70,7 @@ typedef struct stack_st int sorted; int num_alloc; - int (*comp)(const void * const *, const void * const *); + int (*comp)(const void *, const void *); } _STACK; /* Use STACK_OF(...) instead */ #define M_sk_num(sk) ((sk) ? (sk)->num:-1) @@ -81,7 +81,7 @@ void *sk_value(const _STACK *, int); void *sk_set(_STACK *, int, void *); -_STACK *sk_new(int (*cmp)(const void * const *, const void * const *)); +_STACK *sk_new(int (*cmp)(const void *, const void *)); _STACK *sk_new_null(void); void sk_free(_STACK *); void sk_pop_free(_STACK *st, void (*func)(void *)); @@ -95,9 +95,8 @@ int sk_unshift(_STACK *st, void *data); void *sk_shift(_STACK *st); void *sk_pop(_STACK *st); void sk_zero(_STACK *st); -int (*sk_set_cmp_func(_STACK *sk, int (*c)(const void * const *, - const void * const *))) - (const void * const *, const void * const *); +int (*sk_set_cmp_func(_STACK *sk, int (*c)(const void *, const void *))) + (const void *, const void *); _STACK *sk_dup(_STACK *st); void sk_sort(_STACK *st); int sk_is_sorted(const _STACK *st); |