aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/stack/stack.c
diff options
context:
space:
mode:
authorBen Laurie <ben@openssl.org>2008-10-14 08:10:52 +0000
committerBen Laurie <ben@openssl.org>2008-10-14 08:10:52 +0000
commit1ea6472e604ed0e411fa41fcb5f242729ee42cd6 (patch)
tree48d94ac212ab59ca0e17e7c250f5f0f0c063a039 /crypto/stack/stack.c
parentb8dfde2a362a4a4cb1f102674704972471385a87 (diff)
downloadopenssl-1ea6472e604ed0e411fa41fcb5f242729ee42cd6.tar.gz
Type-safe OBJ_bsearch_ex.
Diffstat (limited to 'crypto/stack/stack.c')
-rw-r--r--crypto/stack/stack.c28
1 files changed, 10 insertions, 18 deletions
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)