X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fstore%2Fstore_register.c;h=c7feec39d6085be5db91f72a875e5194d664b847;hp=a138edc6362b91bf321ca9a040daaafae856ae62;hb=6f9c5062682c0f30d62af54b15ad6904e4dd8cb6;hpb=71a5516dcc8a91a9c4fbb724ea7e3658e85f2ad2 diff --git a/crypto/store/store_register.c b/crypto/store/store_register.c index a138edc636..c7feec39d6 100644 --- a/crypto/store/store_register.c +++ b/crypto/store/store_register.c @@ -28,7 +28,7 @@ DEFINE_RUN_ONCE_STATIC(do_registry_init) * Functions for manipulating OSSL_STORE_LOADERs */ -OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(const char *scheme) +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme) { OSSL_STORE_LOADER *res = OPENSSL_zalloc(sizeof(*res)); @@ -49,10 +49,16 @@ OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(const char *scheme) return NULL; } + res->engine = e; res->scheme = scheme; return res; } +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader) +{ + return loader->engine; +} + const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader) { return loader->scheme; @@ -117,11 +123,8 @@ static unsigned long store_loader_hash(const OSSL_STORE_LOADER *v) static int store_loader_cmp(const OSSL_STORE_LOADER *a, const OSSL_STORE_LOADER *b) { - if (a->scheme != NULL && b->scheme != NULL) - return strcmp(a->scheme, b->scheme); - else if (a->scheme == b->scheme) - return 0; - return a->scheme == NULL ? -1 : 1; + assert(a->scheme != NULL && b->scheme != NULL); + return strcmp(a->scheme, b->scheme); } static LHASH_OF(OSSL_STORE_LOADER) *loader_register = NULL; @@ -257,3 +260,16 @@ void ossl_store_destroy_loaders_int(void) CRYPTO_THREAD_lock_free(registry_lock); registry_lock = NULL; } + +/* + * Functions to list OSSL_STORE loaders + */ + +IMPLEMENT_LHASH_DOALL_ARG_CONST(OSSL_STORE_LOADER, void); +int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER + *loader, void *do_arg), + void *do_arg) +{ + lh_OSSL_STORE_LOADER_doall_void(loader_register, do_function, do_arg); + return 1; +}