From a01eb5d08e1b39d60a6f8fc26e5a87ceb92ec18f Mon Sep 17 00:00:00 2001 From: James Booth Date: Wed, 29 Jun 2016 23:35:57 +0100 Subject: WIP - Unload plugin commands --- src/plugins/callbacks.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/plugins/callbacks.c') diff --git a/src/plugins/callbacks.c b/src/plugins/callbacks.c index 2572f7a4..8960738f 100644 --- a/src/plugins/callbacks.c +++ b/src/plugins/callbacks.c @@ -77,6 +77,40 @@ callbacks_add_command(PluginCommand *command) cmd_ac_add_help(&command->command_name[1]); } +void +_command_destroy(PluginCommand *command) +{ + free(command->command_name); + free(command->plugin_name); + command_help_free(command->help); + // TODO free callback +} + +void +callbacks_remove_commands(const char *const plugin_name) +{ + GSList *items_to_remove = NULL; + GSList *curr = p_commands; + while (curr) { + PluginCommand *command = curr->data; + if (g_strcmp0(command->plugin_name, plugin_name) == 0) { + cmd_ac_remove(command->command_name); + cmd_ac_remove_help(&command->command_name[1]); + items_to_remove = g_slist_append(items_to_remove, curr); + } + curr = g_slist_next(curr); + } + + curr = items_to_remove; + while (curr) { + GSList *item = curr->data; + PluginCommand *command = item->data; + _command_destroy(command); + p_commands = g_slist_remove_link(p_commands, item); + curr = g_slist_next(curr); + } +} + void callbacks_add_timed(PluginTimedFunction *timed_function) { -- cgit 1.4.1-2-gfad0