Commit e19106f5 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Create function of the form OBJ_bsearch_xxx() in bsearch typesafe macros

with the appropriate parameters which calls OBJ_bsearch(). A compiler will
typically inline this.

This avoids the need for cmp_xxx variables and fixes unchecked const issues
with CHECKED_PTR_OF()
parent ae7ec4c7
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -185,14 +185,14 @@ static int sk_table_cmp(const ASN1_STRING_TABLE * const *a,
	return (*a)->nid - (*b)->nid;
}

DECLARE_OBJ_BSEARCH_CMP_FN(ASN1_STRING_TABLE, ASN1_STRING_TABLE, table_cmp);
DECLARE_OBJ_BSEARCH_CMP_FN(ASN1_STRING_TABLE, ASN1_STRING_TABLE, table);

static int table_cmp(const ASN1_STRING_TABLE *a, const ASN1_STRING_TABLE *b)
{
	return a->nid - b->nid;
}

IMPLEMENT_OBJ_BSEARCH_CMP_FN(ASN1_STRING_TABLE, ASN1_STRING_TABLE, table_cmp);
IMPLEMENT_OBJ_BSEARCH_CMP_FN(ASN1_STRING_TABLE, ASN1_STRING_TABLE, table);

ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid)
{
@@ -200,10 +200,8 @@ ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid)
	ASN1_STRING_TABLE *ttmp;
	ASN1_STRING_TABLE fnd;
	fnd.nid = nid;
	ttmp = OBJ_bsearch(ASN1_STRING_TABLE, &fnd,
			   ASN1_STRING_TABLE, tbl_standard, 
			   sizeof(tbl_standard)/sizeof(ASN1_STRING_TABLE),
			   table_cmp);
	ttmp = OBJ_bsearch_table(&fnd, tbl_standard, 
			   sizeof(tbl_standard)/sizeof(ASN1_STRING_TABLE));
	if(ttmp) return ttmp;
	if(!stable) return NULL;
	idx = sk_ASN1_STRING_TABLE_find(stable, &fnd);
+4 −6
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@ void main()
#endif

DECLARE_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_ASN1_METHOD *,
			   const EVP_PKEY_ASN1_METHOD *, ameth_cmp);
			   const EVP_PKEY_ASN1_METHOD *, ameth);

static int ameth_cmp(const EVP_PKEY_ASN1_METHOD * const *a,
		     const EVP_PKEY_ASN1_METHOD * const *b)
@@ -122,7 +122,7 @@ static int ameth_cmp(const EVP_PKEY_ASN1_METHOD * const *a,
	}

IMPLEMENT_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_ASN1_METHOD *,
			     const EVP_PKEY_ASN1_METHOD *, ameth_cmp);
			     const EVP_PKEY_ASN1_METHOD *, ameth);

int EVP_PKEY_asn1_get_count(void)
	{
@@ -155,11 +155,9 @@ 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 = OBJ_bsearch(const EVP_PKEY_ASN1_METHOD *, &t,
			  const EVP_PKEY_ASN1_METHOD *, standard_methods,
	ret = OBJ_bsearch_ameth(&t, standard_methods,
			  sizeof(standard_methods)
			  /sizeof(EVP_PKEY_ASN1_METHOD *),
			  ameth_cmp);
			  /sizeof(EVP_PKEY_ASN1_METHOD *));
	if (!ret || !*ret)
		return NULL;
	return *ret;
+5 −7
Original line number Diff line number Diff line
@@ -189,9 +189,9 @@ int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen,
	return 1;	
}

DECLARE_OBJ_BSEARCH_CMP_FN(EVP_PBE_CTL, EVP_PBE_CTL, pbe_cmp2);
DECLARE_OBJ_BSEARCH_CMP_FN(EVP_PBE_CTL, EVP_PBE_CTL, pbe2);

static int pbe_cmp2(const EVP_PBE_CTL *pbe1, const EVP_PBE_CTL *pbe2)
static int pbe2_cmp(const EVP_PBE_CTL *pbe1, const EVP_PBE_CTL *pbe2)
	{
	int ret = pbe1->pbe_type - pbe2->pbe_type;
	if (ret)
@@ -200,7 +200,7 @@ static int pbe_cmp2(const EVP_PBE_CTL *pbe1, const EVP_PBE_CTL *pbe2)
		return pbe1->pbe_nid - pbe2->pbe_nid;
	}

IMPLEMENT_OBJ_BSEARCH_CMP_FN(EVP_PBE_CTL, EVP_PBE_CTL, pbe_cmp2);
IMPLEMENT_OBJ_BSEARCH_CMP_FN(EVP_PBE_CTL, EVP_PBE_CTL, pbe2);

static int pbe_cmp(const EVP_PBE_CTL * const *a, const EVP_PBE_CTL * const *b)
	{
@@ -271,10 +271,8 @@ int EVP_PBE_find(int type, int pbe_nid,
		}
	if (pbetmp == NULL)
		{
		pbetmp = OBJ_bsearch(EVP_PBE_CTL, &pbelu,
				     EVP_PBE_CTL, builtin_pbe,
				     sizeof(builtin_pbe)/sizeof(EVP_PBE_CTL),
				     pbe_cmp2);
		pbetmp = OBJ_bsearch_pbe2(&pbelu, builtin_pbe,
				     sizeof(builtin_pbe)/sizeof(EVP_PBE_CTL));
		}
	if (pbetmp == NULL)
		return 0;
+4 −6
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ static const EVP_PKEY_METHOD *standard_methods[] =
	};

DECLARE_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_METHOD *, const EVP_PKEY_METHOD *,
			   pmeth_cmp);
			   pmeth);

static int pmeth_cmp(const EVP_PKEY_METHOD * const *a,
		     const EVP_PKEY_METHOD * const *b)
@@ -94,7 +94,7 @@ static int pmeth_cmp(const EVP_PKEY_METHOD * const *a,
	}

IMPLEMENT_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_METHOD *, const EVP_PKEY_METHOD *,
			     pmeth_cmp);
			     pmeth);

const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type)
	{
@@ -108,10 +108,8 @@ const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type)
		if (idx >= 0)
			return sk_EVP_PKEY_METHOD_value(app_pkey_methods, idx);
		}
	ret = OBJ_bsearch(const EVP_PKEY_METHOD *, &t,
			  const EVP_PKEY_METHOD *, standard_methods,
			  sizeof(standard_methods)/sizeof(EVP_PKEY_METHOD *),
			  pmeth_cmp);
	ret = OBJ_bsearch_pmeth(&t, standard_methods,
			  sizeof(standard_methods)/sizeof(EVP_PKEY_METHOD *));
	if (!ret || !*ret)
		return NULL;
	return *ret;
+9 −12
Original line number Diff line number Diff line
@@ -81,9 +81,9 @@ static const unsigned int ln_objs[1];
static const unsigned int obj_objs[1];
#endif

DECLARE_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, sn_cmp);
DECLARE_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, ln_cmp);
DECLARE_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, obj_cmp);
DECLARE_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, sn);
DECLARE_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, ln);
DECLARE_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, obj);

#define ADDED_DATA	0
#define ADDED_SNAME	1
@@ -103,12 +103,12 @@ static LHASH_OF(ADDED_OBJ) *added=NULL;
static int sn_cmp(const ASN1_OBJECT * const *a, const unsigned int *b)
	{ return(strcmp((*a)->sn,nid_objs[*b].sn)); }

IMPLEMENT_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, sn_cmp);
IMPLEMENT_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, sn);

static int ln_cmp(const ASN1_OBJECT * const *a, const unsigned int *b)
	{ return(strcmp((*a)->ln,nid_objs[*b].ln)); }

IMPLEMENT_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, ln_cmp);
IMPLEMENT_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, ln);

static unsigned long added_obj_hash(const ADDED_OBJ *ca)
	{
@@ -393,7 +393,7 @@ static int obj_cmp(const ASN1_OBJECT * const *ap, const unsigned int *bp)
	return(memcmp(a->data,b->data,a->length));
	}

IMPLEMENT_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, obj_cmp);
IMPLEMENT_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, obj);

int OBJ_obj2nid(const ASN1_OBJECT *a)
	{
@@ -412,8 +412,7 @@ int OBJ_obj2nid(const ASN1_OBJECT *a)
		adp=lh_ADDED_OBJ_retrieve(added,&ad);
		if (adp != NULL) return (adp->obj->nid);
		}
	op=OBJ_bsearch(const ASN1_OBJECT *, &a, const unsigned int, obj_objs,
		       NUM_OBJ, obj_cmp);
	op=OBJ_bsearch_obj(&a, obj_objs, NUM_OBJ);
	if (op == NULL)
		return(NID_undef);
	return(nid_objs[*op].nid);
@@ -648,8 +647,7 @@ int OBJ_ln2nid(const char *s)
		adp=lh_ADDED_OBJ_retrieve(added,&ad);
		if (adp != NULL) return (adp->obj->nid);
		}
	op=OBJ_bsearch(const ASN1_OBJECT *, &oo, const unsigned int, ln_objs,
				   NUM_LN, ln_cmp);
	op=OBJ_bsearch_ln(&oo, ln_objs, NUM_LN);
	if (op == NULL) return(NID_undef);
	return(nid_objs[*op].nid);
	}
@@ -669,8 +667,7 @@ int OBJ_sn2nid(const char *s)
		adp=lh_ADDED_OBJ_retrieve(added,&ad);
		if (adp != NULL) return (adp->obj->nid);
		}
	op=OBJ_bsearch(const ASN1_OBJECT *, &oo, const unsigned int, sn_objs,
				   NUM_SN, sn_cmp);
	op=OBJ_bsearch_sn(&oo, sn_objs, NUM_SN);
	if (op == NULL) return(NID_undef);
	return(nid_objs[*op].nid);
	}
Loading