diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/pglist.c | 29 | ||||
-rw-r--r-- | src/plugins/pglist.h | 8 | ||||
-rw-r--r-- | src/plugins/plugin.c | 22 | ||||
-rw-r--r-- | src/plugins/plugin.h | 3 |
4 files changed, 57 insertions, 5 deletions
diff --git a/src/plugins/pglist.c b/src/plugins/pglist.c index 2010cda..1f608b4 100644 --- a/src/plugins/pglist.c +++ b/src/plugins/pglist.c @@ -58,7 +58,7 @@ static void browse_directory_for_plugins(const char *); /****************************************************************************** * * -* Paramètres : - * +* Paramètres : load = procéde à un chargement dans la foulée ? * * * * Description : Procède au chargement des différents greffons trouvés. * * * @@ -68,13 +68,14 @@ static void browse_directory_for_plugins(const char *); * * ******************************************************************************/ -bool init_all_plugins(void) +bool init_all_plugins(bool load) { g_rw_lock_init(&_pg_lock); browse_directory_for_plugins(PACKAGE_SOURCE_DIR "/plugins"); - load_remaning_plugins(); + if (load) + load_remaning_plugins(); return true; @@ -113,6 +114,28 @@ void exit_all_plugins(void) /****************************************************************************** * * +* Paramètres : lock = type d'action à mener. * +* * +* Description : Verrouille ou déverrouille l'accès en lecture à la liste. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void _lock_unlock_plugin_list_for_reading(bool lock) +{ + if (lock) + g_rw_lock_reader_lock(&_pg_lock); + else + g_rw_lock_reader_unlock(&_pg_lock); + +} + + +/****************************************************************************** +* * * Paramètres : entry = entrée de répertoire à analyser. * * * * Description : Filtre les répertoire et les modules de greffons pootentels. * diff --git a/src/plugins/pglist.h b/src/plugins/pglist.h index d2f2243..d406cc8 100644 --- a/src/plugins/pglist.h +++ b/src/plugins/pglist.h @@ -36,11 +36,17 @@ /* Procède au chargement des différents greffons trouvés. */ -bool init_all_plugins(void); +bool init_all_plugins(bool); /* Procède au déchargement des différents greffons présents. */ void exit_all_plugins(void); +/* Verrouille ou déverrouille l'accès en lecture à la liste. */ +void _lock_unlock_plugin_list_for_reading(bool lock); + +#define lock_plugin_list_for_reading() _lock_unlock_plugin_list_for_reading(true) +#define unlock_plugin_list_for_reading() _lock_unlock_plugin_list_for_reading(false) + /* Ajoute un greffon à la liste principale de greffons. */ void _register_plugin(GPluginModule *); diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c index a57cb6f..2cfb3de 100644 --- a/src/plugins/plugin.c +++ b/src/plugins/plugin.c @@ -391,6 +391,26 @@ PluginStatusFlags g_plugin_module_get_flags(const GPluginModule *plugin) /****************************************************************************** * * +* Paramètres : plugin = greffon à modifier. * +* flags = fanions à ajouter brutalement au greffon. * +* * +* Description : Ajoute des indications sur l'état du greffon. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_plugin_module_override_flags(GPluginModule *plugin, PluginStatusFlags flags) +{ + plugin->flags |= flags; + +} + + +/****************************************************************************** +* * * Paramètres : plugin = greffon à mettre à jour. * * list = ensemble des greffons disponibles. * * count = taille de cet ensemble. * @@ -543,7 +563,7 @@ bool g_plugin_module_load(GPluginModule *plugin, GPluginModule **list, size_t co plugin->flags |= PSF_FAILURE; - } + } } diff --git a/src/plugins/plugin.h b/src/plugins/plugin.h index 78dcaa6..d86682c 100644 --- a/src/plugins/plugin.h +++ b/src/plugins/plugin.h @@ -82,6 +82,9 @@ const plugin_interface *g_plugin_module_get_interface(const GPluginModule *); /* Fournit des indications sur l'état du greffon. */ PluginStatusFlags g_plugin_module_get_flags(const GPluginModule *); +/* Ajoute des indications sur l'état du greffon. */ +void g_plugin_module_override_flags(GPluginModule *, PluginStatusFlags); + /* Met à jour l'ensemble des dépendances du greffon. */ bool g_plugin_module_resolve_dependencies(GPluginModule *, GPluginModule **, size_t); |