CRYPTO_EX_DATA_FUNCS *m; void *ptr; int i,max;  if (meth != NULL) { max=sk_CRYPTO_EX_DATA_FUNCS_num(meth); for (i=0; i<max; i++) { m=sk_CRYPTO_EX_DATA_FUNCS_value(meth,i); if ((m != NULL) && (m->free_func != NULL)) { ptr=CRYPTO_get_ex_data(ad,i); m->free_func(obj,ptr,ad,i,m->argl,m->argp); } } } if (ad->sk != NULL) { sk_free(ad->sk); ad->sk=NULL; }
IMPL_CHECK return EX_IMPL(free_ex_data)(class_index, obj, ad);
void CRYPTO_free_ex_data(STACK_OF(CRYPTO_EX_DATA_FUNCS) *meth, void *obj, CRYPTO_EX_DATA *ad)	{	CRYPTO_EX_DATA_FUNCS *m;	void *ptr;	int i,max;	if (meth != NULL)		{		max=sk_CRYPTO_EX_DATA_FUNCS_num(meth);		for (i=0; i<max; i++)			{			m=sk_CRYPTO_EX_DATA_FUNCS_value(meth,i);			if ((m != NULL) && (m->free_func != NULL))				{				ptr=CRYPTO_get_ex_data(ad,i);				m->free_func(obj,ptr,ad,i,m->argl,m->argp);				}			}		}	if (ad->sk != NULL)		{		sk_free(ad->sk);		ad->sk=NULL;		}	}