about summary refs log tree commit diff stats
path: root/src/plugins/c_plugins.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/c_plugins.c')
-rw-r--r--src/plugins/c_plugins.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/plugins/c_plugins.c b/src/plugins/c_plugins.c
index 5c0047c8..1a4b8754 100644
--- a/src/plugins/c_plugins.c
+++ b/src/plugins/c_plugins.c
@@ -81,6 +81,7 @@ c_plugin_create(const char *const filename)
     plugin->init_func = c_init_hook;
     plugin->on_start_func = c_on_start_hook;
     plugin->on_shutdown_func = c_on_shutdown_hook;
+    plugin->on_unload_func = c_on_unload_hook;
     plugin->on_connect_func = c_on_connect_hook;
     plugin->on_disconnect_func = c_on_disconnect_hook;
     plugin->pre_chat_message_display = c_pre_chat_message_display_hook;
@@ -162,6 +163,20 @@ c_on_shutdown_hook(ProfPlugin *plugin)
 }
 
 void
+c_on_unload_hook(ProfPlugin *plugin)
+{
+    void *f = NULL;
+    void (*func)(void);
+    assert(plugin && plugin->module);
+
+    if (NULL == (f = dlsym(plugin->module, "prof_on_unload")))
+        return;
+
+    func = (void (*)(void))f;
+    func();
+}
+
+void
 c_on_connect_hook(ProfPlugin *plugin, const char *const account_name, const char *const fulljid)
 {
     void *f = NULL;