Type-checked (and modern C compliant) OBJ_bsearch.
[openssl.git] / crypto / evp / pmeth_lib.c
index 765a6c07dbfd125da1dff55d42aca6df89ae96b3..3fd11cbb5a1ab2f2da97f760ccaa3786d8848d9e 100644 (file)
@@ -84,15 +84,22 @@ static const EVP_PKEY_METHOD *standard_methods[] =
        &hmac_pkey_meth,
        };
 
+DECLARE_OBJ_BSEARCH_CMP_FN(EVP_PKEY_METHOD *, const EVP_PKEY_METHOD *,
+                          pmeth_cmp);
+
 static int pmeth_cmp(const EVP_PKEY_METHOD * const *a,
-                const EVP_PKEY_METHOD * const *b)
+                    const EVP_PKEY_METHOD * const *b)
        {
         return ((*a)->pkey_id - (*b)->pkey_id);
        }
 
+IMPLEMENT_OBJ_BSEARCH_CMP_FN(EVP_PKEY_METHOD *, const EVP_PKEY_METHOD *,
+                            pmeth_cmp);
+
 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type)
        {
-       EVP_PKEY_METHOD tmp, *t = &tmp, **ret;
+       EVP_PKEY_METHOD tmp, *t = &tmp;
+       const EVP_PKEY_METHOD **ret;
        tmp.pkey_id = type;
        if (app_pkey_methods)
                {
@@ -101,11 +108,10 @@ const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type)
                if (idx >= 0)
                        return sk_EVP_PKEY_METHOD_value(app_pkey_methods, idx);
                }
-       ret = (EVP_PKEY_METHOD **) OBJ_bsearch((char *)&t,
-                       (char *)standard_methods,
-                       sizeof(standard_methods)/sizeof(EVP_PKEY_METHOD *),
-                       sizeof(EVP_PKEY_METHOD *),
-                       (int (*)(const void *, const void *))pmeth_cmp);
+       ret = OBJ_bsearch(EVP_PKEY_METHOD *, &t,
+                         const EVP_PKEY_METHOD *, standard_methods,
+                         sizeof(standard_methods)/sizeof(EVP_PKEY_METHOD *),
+                         pmeth_cmp);
        if (!ret || !*ret)
                return NULL;
        return *ret;