diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/pglist.c | 43 | ||||
-rw-r--r-- | src/plugins/pglist.h | 7 |
2 files changed, 44 insertions, 6 deletions
diff --git a/src/plugins/pglist.c b/src/plugins/pglist.c index 18a2f3f..bbd2d36 100644 --- a/src/plugins/pglist.c +++ b/src/plugins/pglist.c @@ -499,7 +499,7 @@ void load_remaning_plugins(void) * Paramètres : name = désignation du greffon recherché. * * index = indice du greffon trouvé. [OUT] * * * -* Description : Founit le greffon répondant à un nom donné. * +* Description : Fournit le greffon répondant à un nom donné. * * * * Retour : Instance du greffon trouvé ou NULL si aucun. * * * @@ -548,10 +548,45 @@ GPluginModule *get_plugin_by_name(const char *name, size_t *index) /****************************************************************************** * * +* Paramètres : count = nombre de greffons trouvés. [OUT] * +* * +* Description : Fournit la liste de l'ensemble des greffons. * +* * +* Retour : Liste de tous les greffons chargés. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GPluginModule **get_all_plugins(size_t *count) +{ + GPluginModule **result; /* Liste à retourner */ + size_t i; /* Boucle de parcours */ + + g_rw_lock_reader_lock(&_pg_lock); + + result = malloc(_pg_count * sizeof(GPluginModule *)); + *count = _pg_count; + + for (i = 0; i < _pg_count; i++) + { + result[i] = _pg_list[i]; + g_object_ref(G_OBJECT(_pg_list[i])); + } + + g_rw_lock_reader_unlock(&_pg_lock); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : action = fonctionnalité recherchée. * * count = nombre de greffons trouvés. [OUT] * * * -* Description : Founit les greffons offrant le service demandé. * +* Description : Fournit les greffons offrant le service demandé. * * * * Retour : Liste de greffons correspondants issue d'un tri interne. * * * @@ -562,8 +597,8 @@ GPluginModule *get_plugin_by_name(const char *name, size_t *index) GPluginModule **get_all_plugins_for_action(PluginAction action, size_t *count) { GPluginModule **result; /* Liste à retourner */ - const plugin_interface *pg_iface; /* Informations à consulter */ size_t i; /* Boucle de parcours #1 */ + const plugin_interface *pg_iface; /* Informations à consulter */ size_t j; /* Boucle de parcours #2 */ result = NULL; @@ -579,7 +614,7 @@ GPluginModule **get_all_plugins_for_action(PluginAction action, size_t *count) { if (pg_iface->actions[j] == action) { - result = (GPluginModule **)realloc(result, ++(*count) * sizeof(GPluginModule *)); + result = realloc(result, ++(*count) * sizeof(GPluginModule *)); result[*count - 1] = _pg_list[i]; g_object_ref(G_OBJECT(_pg_list[i])); diff --git a/src/plugins/pglist.h b/src/plugins/pglist.h index a380844..e0aec3f 100644 --- a/src/plugins/pglist.h +++ b/src/plugins/pglist.h @@ -56,10 +56,13 @@ void register_plugin(GPluginModule *); /* Charge tous les greffons restant à charger. */ void load_remaning_plugins(void); -/* Founit le greffon répondant à un nom donné. */ +/* Fournit le greffon répondant à un nom donné. */ GPluginModule *get_plugin_by_name(const char *, size_t *); -/* Founit less greffons offrant le service demandé. */ +/* Fournit la liste de l'ensemble des greffons. */ +GPluginModule **get_all_plugins(size_t *); + +/* Fournit les greffons offrant le service demandé. */ GPluginModule **get_all_plugins_for_action(PluginAction, size_t *); |