From 2bd13b4d55664518e4b2741de813ac726fe87892 Mon Sep 17 00:00:00 2001 From: Doug Hogan Date: Fri, 21 Dec 2018 08:03:53 -0800 Subject: Make engine ctx init internal to engine.c per PR feedback --- lib/crypto/c_src/crypto.c | 10 +--------- lib/crypto/c_src/engine.c | 24 ++++++++++++++++++++++-- lib/crypto/c_src/engine.h | 10 ++-------- 3 files changed, 25 insertions(+), 19 deletions(-) (limited to 'lib') diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c index 5b42b976bb..27a0ebfd6b 100644 --- a/lib/crypto/c_src/crypto.c +++ b/lib/crypto/c_src/crypto.c @@ -190,17 +190,9 @@ static int initialize(ErlNifEnv* env, ERL_NIF_TERM load_info) if (!init_cipher_ctx(env)) { return __LINE__; } - -#ifdef HAS_ENGINE_SUPPORT - engine_ctx_rtype = enif_open_resource_type(env, NULL, "ENGINE_CTX", - (ErlNifResourceDtor*) engine_ctx_dtor, - ERL_NIF_RT_CREATE|ERL_NIF_RT_TAKEOVER, - NULL); - if (!engine_ctx_rtype) { - PRINTF_ERR0("CRYPTO: Could not open resource type 'ENGINE_CTX'"); + if (!init_engine_ctx(env)) { return __LINE__; } -#endif if (library_initialized) { /* Repeated loading of this library (module upgrade). diff --git a/lib/crypto/c_src/engine.c b/lib/crypto/c_src/engine.c index ffafa909e6..dc8e1828ce 100644 --- a/lib/crypto/c_src/engine.c +++ b/lib/crypto/c_src/engine.c @@ -21,12 +21,17 @@ #include "engine.h" #ifdef HAS_ENGINE_SUPPORT -ErlNifResourceType* engine_ctx_rtype; +struct engine_ctx { + ENGINE *engine; + char *id; +}; + +static ErlNifResourceType* engine_ctx_rtype; static int get_engine_load_cmd_list(ErlNifEnv* env, const ERL_NIF_TERM term, char **cmds, int i); static int zero_terminate(ErlNifBinary bin, char **buf); -void engine_ctx_dtor(ErlNifEnv* env, struct engine_ctx* ctx) { +static void engine_ctx_dtor(ErlNifEnv* env, struct engine_ctx* ctx) { PRINTF_ERR0("engine_ctx_dtor"); if(ctx->id) { PRINTF_ERR1(" non empty ctx->id=%s", ctx->id); @@ -75,6 +80,21 @@ static int zero_terminate(ErlNifBinary bin, char **buf) { } #endif /* HAS_ENGINE_SUPPORT */ +int init_engine_ctx(ErlNifEnv *env) { +#ifdef HAS_ENGINE_SUPPORT + engine_ctx_rtype = enif_open_resource_type(env, NULL, "ENGINE_CTX", + (ErlNifResourceDtor*) engine_ctx_dtor, + ERL_NIF_RT_CREATE|ERL_NIF_RT_TAKEOVER, + NULL); + if (engine_ctx_rtype == NULL) { + PRINTF_ERR0("CRYPTO: Could not open resource type 'ENGINE_CTX'"); + return 0; + } +#endif + + return 1; +} + ERL_NIF_TERM engine_by_id_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {/* (EngineId) */ #ifdef HAS_ENGINE_SUPPORT diff --git a/lib/crypto/c_src/engine.h b/lib/crypto/c_src/engine.h index 93d55fd513..4a2eed9672 100644 --- a/lib/crypto/c_src/engine.h +++ b/lib/crypto/c_src/engine.h @@ -24,18 +24,12 @@ #include "common.h" #ifdef HAS_ENGINE_SUPPORT -struct engine_ctx { - ENGINE *engine; - char *id; -}; - -extern ErlNifResourceType* engine_ctx_rtype; - int get_engine_and_key_id(ErlNifEnv *env, ERL_NIF_TERM key, char ** id, ENGINE **e); char *get_key_password(ErlNifEnv *env, ERL_NIF_TERM key); -void engine_ctx_dtor(ErlNifEnv* env, struct engine_ctx* ctx); #endif /* HAS_ENGINE_SUPPORT */ +int init_engine_ctx(ErlNifEnv *env); + ERL_NIF_TERM engine_by_id_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]); ERL_NIF_TERM engine_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]); ERL_NIF_TERM engine_finish_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]); -- cgit v1.2.3