summaryrefslogtreecommitdiff
path: root/src/mint/plugin.c
diff options
context:
space:
mode:
authorSree Harsha Totakura <sreeharsha@totakura.in>2015-03-26 18:06:37 +0100
committerSree Harsha Totakura <sreeharsha@totakura.in>2015-03-26 18:06:37 +0100
commitf94bb0a3a076caab71597b32963fd2815b8446f9 (patch)
treec9a08e071a446f6a4b8b10149f9cbaef567d69cc /src/mint/plugin.c
parenta3ac2587cfee3c8b6e058d4086eea8f5f297e5af (diff)
downloadexchange-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.c31
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));
}