summaryrefslogtreecommitdiff
path: root/src/plugins/plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/plugin.c')
-rw-r--r--src/plugins/plugin.c40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index f12c1f6..a57cb6f 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -336,6 +336,25 @@ GPluginModule *g_plugin_module_new(const gchar *filename)
* *
* Paramètres : plugin = greffon à consulter. *
* *
+* Description : Indique le fichier contenant le greffon manipulé. *
+* *
+* Retour : Chemin d'accès au greffon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+const char *g_plugin_module_get_filename(const GPluginModule *plugin)
+{
+ return plugin->filename;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = greffon à consulter. *
+* *
* Description : Fournit la description du greffon dans son intégralité. *
* *
* Retour : Interfaçage renseigné. *
@@ -403,7 +422,7 @@ bool g_plugin_module_resolve_dependencies(GPluginModule *plugin, GPluginModule *
assert(count == get_bit_field_size(plugin->dependencies));
#endif
- if ((plugin->flags & (PSF_UNKNOW_DEP | PSF_DEP_LOOP)) != 0)
+ if ((plugin->flags & (PSF_UNKNOW_DEP | PSF_DEP_LOOP)) == 0)
{
pg_iface = g_plugin_module_get_interface(plugin);
@@ -420,9 +439,10 @@ bool g_plugin_module_resolve_dependencies(GPluginModule *plugin, GPluginModule *
else
{
+ set_in_bit_field(new, index, 1);
or_bit_field(new, dependency->dependencies);
- g_object_ref(G_OBJECT(dependency));
+ g_object_unref(G_OBJECT(dependency));
}
@@ -446,7 +466,7 @@ bool g_plugin_module_resolve_dependencies(GPluginModule *plugin, GPluginModule *
if (test_in_bit_field(plugin->dependencies, index))
plugin->flags |= PSF_DEP_LOOP;
- g_object_ref(G_OBJECT(dependency));
+ g_object_unref(G_OBJECT(dependency));
}
@@ -483,9 +503,7 @@ bool g_plugin_module_load(GPluginModule *plugin, GPluginModule **list, size_t co
flags = g_plugin_module_get_flags(plugin);
- assert((flags & BROKEN_PLUGIN_STATUS) == 0);
-
- if (flags & PSF_FAILURE) return false;
+ if (flags & BROKEN_PLUGIN_STATUS) return false;
if (flags & PSF_LOADED) return true;
@@ -498,14 +516,17 @@ bool g_plugin_module_load(GPluginModule *plugin, GPluginModule **list, size_t co
for (i = 0; i < pg_iface->required_count && result; i++)
{
dependency = get_plugin_by_name(pg_iface->required[i], NULL);
+ assert(dependency != NULL);
result = g_plugin_module_load(dependency, list, count);
+ g_object_unref(G_OBJECT(dependency));
+
}
if (!result)
log_variadic_message(LMT_ERROR,
- _("Some dependencies failed to load for Plugin '%s'"), plugin->filename);
+ _("Some dependencies failed to load for plugin '%s'"), plugin->filename);
/* Chargement du greffon courant */
@@ -516,9 +537,14 @@ bool g_plugin_module_load(GPluginModule *plugin, GPluginModule **list, size_t co
result = plugin->init(plugin);
if (!result)
+ {
log_variadic_message(LMT_ERROR,
_("Plugin '%s' failed to load itself..."), plugin->filename);
+ plugin->flags |= PSF_FAILURE;
+
+ }
+
}
if (result)