@ -362,6 +362,42 @@ int ossl_method_store_remove(OSSL_METHOD_STORE *store, int nid,
return 0 ;
}
static void alg_do_one ( ALGORITHM * alg , IMPLEMENTATION * impl ,
void ( * fn ) ( int id , void * method , void * fnarg ) ,
void * fnarg )
{
fn ( alg - > nid , impl - > method . method , fnarg ) ;
}
struct alg_do_each_data_st {
void ( * fn ) ( int id , void * method , void * fnarg ) ;
void * fnarg ;
} ;
static void alg_do_each ( ossl_uintmax_t idx , ALGORITHM * alg , void * arg )
{
struct alg_do_each_data_st * data = arg ;
int i , end = sk_IMPLEMENTATION_num ( alg - > impls ) ;
for ( i = 0 ; i < end ; i + + ) {
IMPLEMENTATION * impl = sk_IMPLEMENTATION_value ( alg - > impls , i ) ;
alg_do_one ( alg , impl , data - > fn , data - > fnarg ) ;
}
}
void ossl_method_store_do_all ( OSSL_METHOD_STORE * store ,
void ( * fn ) ( int id , void * method , void * fnarg ) ,
void * fnarg )
{
struct alg_do_each_data_st data ;
data . fn = fn ;
data . fnarg = fnarg ;
if ( store ! = NULL )
ossl_sa_ALGORITHM_doall_arg ( store - > algs , alg_do_each , & data ) ;
}
int ossl_method_store_fetch ( OSSL_METHOD_STORE * store , int nid ,
const char * prop_query ,
void * * method )