Type-checked (and modern C compliant) OBJ_bsearch.
[openssl.git] / crypto / asn1 / ameth_lib.c
index d155791324007296de75bcc9220fa2d9ff5ebde0..300195bf95c421dfb17387fc2e6e4b8864ed576e 100644 (file)
@@ -94,7 +94,7 @@ static const EVP_PKEY_ASN1_METHOD *standard_methods[] =
        };
 
 typedef int sk_cmp_fn_type(const char * const *a, const char * const *b);
-DECLARE_STACK_OF(EVP_PKEY_ASN1_METHOD);
+DECLARE_STACK_OF(EVP_PKEY_ASN1_METHOD)
 static STACK_OF(EVP_PKEY_ASN1_METHOD) *app_methods = NULL;
 
 
@@ -112,12 +112,18 @@ void main()
        }
 #endif
 
+DECLARE_OBJ_BSEARCH_CMP_FN(EVP_PKEY_ASN1_METHOD *,
+                          const EVP_PKEY_ASN1_METHOD *, ameth_cmp);
+
 static int ameth_cmp(const EVP_PKEY_ASN1_METHOD * const *a,
-                const EVP_PKEY_ASN1_METHOD * const *b)
+                    const EVP_PKEY_ASN1_METHOD * const *b)
        {
         return ((*a)->pkey_id - (*b)->pkey_id);
        }
 
+IMPLEMENT_OBJ_BSEARCH_CMP_FN(EVP_PKEY_ASN1_METHOD *,
+                            const EVP_PKEY_ASN1_METHOD *, ameth_cmp);
+
 int EVP_PKEY_asn1_get_count(void)
        {
        int num = sizeof(standard_methods)/sizeof(EVP_PKEY_ASN1_METHOD *);
@@ -139,7 +145,8 @@ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx)
 
 static const EVP_PKEY_ASN1_METHOD *pkey_asn1_find(int type)
        {
-       EVP_PKEY_ASN1_METHOD tmp, *t = &tmp, **ret;
+       EVP_PKEY_ASN1_METHOD tmp, *t = &tmp;
+       const EVP_PKEY_ASN1_METHOD **ret;
        tmp.pkey_id = type;
        if (app_methods)
                {
@@ -148,11 +155,11 @@ static const EVP_PKEY_ASN1_METHOD *pkey_asn1_find(int type)
                if (idx >= 0)
                        return sk_EVP_PKEY_ASN1_METHOD_value(app_methods, idx);
                }
-       ret = (EVP_PKEY_ASN1_METHOD **) OBJ_bsearch((char *)&t,
-                       (char *)standard_methods,
-                       sizeof(standard_methods)/sizeof(EVP_PKEY_ASN1_METHOD *),
-                       sizeof(EVP_PKEY_ASN1_METHOD *),
-                       (int (*)(const void *, const void *))ameth_cmp);
+       ret = OBJ_bsearch(EVP_PKEY_ASN1_METHOD *, &t,
+                         const EVP_PKEY_ASN1_METHOD *, standard_methods,
+                         sizeof(standard_methods)
+                         /sizeof(EVP_PKEY_ASN1_METHOD *),
+                         ameth_cmp);
        if (!ret || !*ret)
                return NULL;
        return *ret;