@ -321,15 +321,15 @@ inner_ossl_decoder_fetch(struct decoder_data_st *methdata, int id,
}
/*
* If we have been passed neither a name_id or a name , we have an
* If we have been passed both an id and a name , we have an
* internal programming error .
*/
if ( ! ossl_assert ( id != 0 | | name ! = NULL ) ) {
if ( ! ossl_assert ( id == 0 | | name = = NULL ) ) {
ERR_raise ( ERR_LIB_OSSL_DECODER , ERR_R_INTERNAL_ERROR ) ;
return NULL ;
}
if ( id = = 0 )
if ( id = = 0 & & name ! = NULL )
id = ossl_namemap_name2num ( namemap , name ) ;
/*
@ -363,10 +363,11 @@ inner_ossl_decoder_fetch(struct decoder_data_st *methdata, int id,
* already been calculated in get_decoder_from_store ( ) and
* put_decoder_in_store ( ) above .
*/
if ( id = = 0 )
if ( id = = 0 & & name ! = NULL )
id = ossl_namemap_name2num ( namemap , name ) ;
ossl_method_store_cache_set ( store , id , properties , method ,
up_ref_decoder , free_decoder ) ;
if ( id ! = 0 )
ossl_method_store_cache_set ( store , id , properties , method ,
up_ref_decoder , free_decoder ) ;
}
/*
@ -376,7 +377,7 @@ inner_ossl_decoder_fetch(struct decoder_data_st *methdata, int id,
unsupported = ! methdata - > flag_construct_error_occurred ;
}
if ( method = = NULL ) {
if ( ( id ! = 0 | | name ! = NULL ) & & method = = NULL ) {
int code = unsupported ? ERR_R_UNSUPPORTED : ERR_R_FETCH_FAILED ;
if ( name = = NULL )
@ -483,42 +484,36 @@ int OSSL_DECODER_is_a(const OSSL_DECODER *decoder, const char *name)
return 0 ;
}
struct d ecoder_do_all _data_st {
void ( * user_fn ) ( void * method , void * arg ) ;
struct d o_one _data_st {
void ( * user_fn ) ( OSSL_DECODER * decoder , void * arg ) ;
void * user_arg ;
} ;
static void decoder_do_one ( OSSL_PROVIDER * provider ,
const OSSL_ALGORITHM * algodef ,
int no_store , void * vdata )
static void do_one ( ossl_unused int id , void * method , void * arg )
{
struct decoder_do_all_data_st * data = vdata ;
OSSL_LIB_CTX * libctx = ossl_provider_libctx ( provider ) ;
OSSL_NAMEMAP * namemap = ossl_namemap_stored ( libctx ) ;
const char * names = algodef - > algorithm_names ;
int id = ossl_namemap_add_names ( namemap , 0 , names , NAME_SEPARATOR ) ;
void * method = NULL ;
if ( id ! = 0 )
method = ossl_decoder_from_algorithm ( id , algodef , provider ) ;
struct do_one_data_st * data = arg ;
if ( method ! = NULL ) {
data - > user_fn ( method , data - > user_arg ) ;
OSSL_DECODER_free ( method ) ;
}
data - > user_fn ( method , data - > user_arg ) ;
}
void OSSL_DECODER_do_all_provided ( OSSL_LIB_CTX * libctx ,
void ( * fn ) ( OSSL_DECODER * decoder , void * arg ) ,
void * arg )
void ( * user_fn ) ( OSSL_DECODER * decoder ,
void * arg ) ,
void * user_arg )
{
struct decoder_do_all_data_st data ;
struct decoder_data_st methdata ;
struct do_one_data_st data ;
methdata . libctx = libctx ;
methdata . tmp_store = NULL ;
( void ) inner_ossl_decoder_fetch ( & methdata , 0 , NULL , NULL /* properties */ ) ;
data . user_fn = ( void ( * ) ( void * , void * ) ) fn ;
data . user_arg = arg ;
ossl_algorithm_do_all ( libctx , OSSL_OP_DECODER , NULL ,
NULL , decoder_do_one , NULL ,
& data ) ;
data . user_fn = user_fn ;
data . user_arg = user_arg ;
if ( methdata . tmp_store ! = NULL )
ossl_method_store_do_all ( methdata . tmp_store , & do_one , & data ) ;
ossl_method_store_do_all ( get_decoder_store ( libctx ) , & do_one , & data ) ;
dealloc_tmp_decoder_store ( methdata . tmp_store ) ;
}
int OSSL_DECODER_names_do_all ( const OSSL_DECODER * decoder ,