summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/pglist.c15
-rw-r--r--src/plugins/plugin-int.h3
-rw-r--r--src/plugins/plugin.c10
-rw-r--r--src/plugins/plugin.h2
4 files changed, 15 insertions, 15 deletions
diff --git a/src/plugins/pglist.c b/src/plugins/pglist.c
index bca3e6a..6b51690 100644
--- a/src/plugins/pglist.c
+++ b/src/plugins/pglist.c
@@ -151,13 +151,10 @@ void browse_directory_for_plugins(plugins_list *list, const char *dir)
else
{
- plugin = g_plugin_module_new(filename, list->ref);
+ plugin = g_plugin_module_new(filename);
if (plugin != NULL)
- {
- list->plugins = (GPluginModule **)realloc(list->plugins, ++list->plugins_count * sizeof(GPluginModule *));
- list->plugins[list->plugins_count - 1] = plugin;
- }
+ add_plugin_to_main_list(plugin);
}
@@ -253,6 +250,14 @@ void add_plugin_to_main_list(GPluginModule *plugin)
list = &_list;
+ if (plugin->init != NULL && !plugin->init(plugin, list->ref))
+ {
+ log_variadic_message(LMT_ERROR, _("Initialization of plugin '%s' failed !"),
+ plugin->filename);
+ g_object_unref(G_OBJECT(plugin));
+ return;
+ }
+
list->plugins = (GPluginModule **)realloc(list->plugins, ++list->plugins_count * sizeof(GPluginModule *));
list->plugins[list->plugins_count - 1] = plugin;
diff --git a/src/plugins/plugin-int.h b/src/plugins/plugin-int.h
index 9a5c37c..055f6ff 100644
--- a/src/plugins/plugin-int.h
+++ b/src/plugins/plugin-int.h
@@ -37,7 +37,7 @@
/* Précise le nom associé au greffon. */
typedef char * (* get_plugin_name_fc) (void);
-/* Procède à l'initialisation du greffon */
+/* Procède à l'initialisation du greffon. */
typedef bool (* init_plugin_fc) (GPluginModule *, GObject *);
/* Fournit une indication sur le type d'opération(s) menée(s). */
@@ -61,6 +61,7 @@ struct _GPluginModule
GModule *module; /* Abstration de manipulation */
char *name; /* Nom associé au greffon */
+ char *filename; /* Fichier associé au greffon */
PluginType type; /* Type(s) du greffon */
init_plugin_fc init; /* Procédure d'initialisation */
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index c6a49c6..dabe493 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -90,7 +90,6 @@ static void g_plugin_module_init(GPluginModule *line)
/******************************************************************************
* *
* Paramètres : filename = nom du fichier à charger. *
-* ref = espace de référencement global. *
* *
* Description : Crée un module pour un greffon donné. *
* *
@@ -100,7 +99,7 @@ static void g_plugin_module_init(GPluginModule *line)
* *
******************************************************************************/
-GPluginModule *g_plugin_module_new(const gchar *filename, GObject *ref)
+GPluginModule *g_plugin_module_new(const gchar *filename)
{
GPluginModule *result; /* Structure à retourner */
get_plugin_name_fc get_name; /* Nom du greffon */
@@ -123,6 +122,7 @@ GPluginModule *g_plugin_module_new(const gchar *filename, GObject *ref)
}
result->name = get_name();
+ result->filename = strdup(filename);
if (!g_module_symbol(result->module, "init_plugin", (gpointer *)&result->init))
result->init = NULL;
@@ -170,12 +170,6 @@ GPluginModule *g_plugin_module_new(const gchar *filename, GObject *ref)
- if (result->init != NULL && !result->init(result, ref))
- {
- log_variadic_message(LMT_ERROR, _("Initialization of plugin '%s' failed !"), filename);
- goto bad_plugin;
- }
-
dir = strdup(filename);
dir = dirname(dir);
diff --git a/src/plugins/plugin.h b/src/plugins/plugin.h
index 6fbba4d..c0f6cd1 100644
--- a/src/plugins/plugin.h
+++ b/src/plugins/plugin.h
@@ -52,7 +52,7 @@ typedef struct _GPluginModuleClass GPluginModuleClass;
GType g_plugin_module_get_type(void);
/* Crée un module pour un greffon donné. */
-GPluginModule *g_plugin_module_new(const gchar *, GObject *);
+GPluginModule *g_plugin_module_new(const gchar *);
/* Fournit le nom associé au greffon. */
const char *g_plugin_module_get_name(const GPluginModule *);