about summary refs log tree commit diff stats
path: root/src/plugins/plugins.c
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2016-06-29 23:35:57 +0100
committerJames Booth <boothj5@gmail.com>2016-06-29 23:35:57 +0100
commita01eb5d08e1b39d60a6f8fc26e5a87ceb92ec18f (patch)
treebe77126865e0cb26963859ad384a225e9c993c9e /src/plugins/plugins.c
parent61a09476c511c33abd9b6be3d5786fee1fa93b94 (diff)
downloadprofani-tty-a01eb5d08e1b39d60a6f8fc26e5a87ceb92ec18f.tar.gz
WIP - Unload plugin commands
Diffstat (limited to 'src/plugins/plugins.c')
-rw-r--r--src/plugins/plugins.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c
index 5757a174..3395c77f 100644
--- a/src/plugins/plugins.c
+++ b/src/plugins/plugins.c
@@ -172,6 +172,33 @@ plugins_load(const char *const name)
     }
 }
 
+gboolean
+plugins_unload(const char *const name)
+{
+    GSList *found = g_slist_find_custom(plugins, name, (GCompareFunc)_find_by_name);
+    if (!found) {
+        log_info("Failed to unload plugin: %s, plugin not currently loaded", name);
+        return FALSE;
+    }
+
+    plugins = g_slist_remove_link(plugins, found);
+
+#ifdef HAVE_PYTHON
+    if (g_str_has_suffix(name, ".py")) {
+        python_plugin_destroy(found->data);
+    }
+#endif
+#ifdef HAVE_C
+    if (g_str_has_suffix(name, ".so")) {
+        c_plugin_destroy(found->data);
+    }
+#endif
+
+    g_slist_free(found);
+
+    return TRUE;
+}
+
 GSList *
 plugins_get_list(void)
 {