diff options
author | Sree Harsha Totakura <sreeharsha@totakura.in> | 2015-03-26 18:06:37 +0100 |
---|---|---|
committer | Sree Harsha Totakura <sreeharsha@totakura.in> | 2015-03-26 18:06:37 +0100 |
commit | f94bb0a3a076caab71597b32963fd2815b8446f9 (patch) | |
tree | c9a08e071a446f6a4b8b10149f9cbaef567d69cc /src/mint/plugin.c | |
parent | a3ac2587cfee3c8b6e058d4086eea8f5f297e5af (diff) | |
download | exchange-f94bb0a3a076caab71597b32963fd2815b8446f9.tar.gz exchange-f94bb0a3a076caab71597b32963fd2815b8446f9.tar.bz2 exchange-f94bb0a3a076caab71597b32963fd2815b8446f9.zip |
db: Implement plugin loading and unloading
Diffstat (limited to 'src/mint/plugin.c')
-rw-r--r-- | src/mint/plugin.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/mint/plugin.c b/src/mint/plugin.c index 4fb75f87a..455c7e8fa 100644 --- a/src/mint/plugin.c +++ b/src/mint/plugin.c @@ -43,7 +43,34 @@ static char *old_dlsearchpath; int TALER_MINT_plugin_load (const struct GNUNET_CONFIGURATION_Handle *cfg) { - return GNUNET_SYSERR; + char *plugin_name; + char *lib_name; + struct GNUNET_CONFIGURATION_Handle *cfg_dup; + + if (NULL != plugin) + return GNUNET_OK; + if (GNUNET_SYSERR == + GNUNET_CONFIGURATION_get_value_string (cfg, + "mint", + "db", + &plugin_name)) + { + GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, + "mint", + "db"); + return GNUNET_SYSERR; + } + (void) GNUNET_asprintf (&lib_name, + "libtaler_plugin_mintdb_%s", + plugin_name); + GNUNET_free (plugin_name); + cfg_dup = GNUNET_CONFIGURATION_dup (cfg); + plugin = GNUNET_PLUGIN_load (lib_name, cfg_dup); + GNUNET_CONFIGURATION_destroy (cfg_dup); + GNUNET_free (lib_name); + if (NULL == plugin) + return GNUNET_SYSERR; + return GNUNET_OK; } @@ -55,6 +82,8 @@ TALER_MINT_plugin_unload () { if (NULL == plugin) return; + GNUNET_assert (NULL == GNUNET_PLUGIN_unload (plugin->library_name, + plugin)); } |