summaryrefslogtreecommitdiff
path: root/src/plugins/plugin.c
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2008-03-22 23:36:12 +0100
committerSebastien Helleu <flashcode@flashtux.org>2008-03-22 23:36:12 +0100
commit61ca92972886cd7a9bc301ae7e23d6dde74920bc (patch)
tree7b69905a86b095f4fe6dffaa5a86ae6a0725c125 /src/plugins/plugin.c
parent8c4dc57d8e5a6b1f9f239bdcbf30dd07480993be (diff)
downloadweechat-61ca92972886cd7a9bc301ae7e23d6dde74920bc.zip
Added tags for lines and custom filtering by tags or regex (task #7674), fixed many memory leaks
Diffstat (limited to 'src/plugins/plugin.c')
-rw-r--r--src/plugins/plugin.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index efabf24bb..59cea632c 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -88,6 +88,7 @@ plugin_load (char *filename)
void *handle;
char *name, *author, *description, *version, *license, *charset;
t_weechat_init_func *init_func;
+ int rc;
struct t_weechat_plugin *new_plugin;
if (!filename)
@@ -242,6 +243,7 @@ plugin_load (char *filename)
new_plugin->strncasecmp = &string_strncasecmp;
new_plugin->strcmp_ignore_chars = &string_strcmp_ignore_chars;
new_plugin->strcasestr = &string_strcasestr;
+ new_plugin->string_match = &string_match;
new_plugin->string_replace = &string_replace;
new_plugin->string_remove_quotes = &string_remove_quotes;
new_plugin->string_strip = &string_strip;
@@ -309,7 +311,7 @@ plugin_load (char *filename)
new_plugin->prefix = &plugin_api_prefix;
new_plugin->color = &plugin_api_color;
- new_plugin->printf_date = &gui_chat_printf_date;
+ new_plugin->printf_date_tags = &gui_chat_printf_date_tags;
new_plugin->infobar_printf = &plugin_api_infobar_printf;
new_plugin->infobar_remove = &plugin_api_infobar_remove;
new_plugin->log_printf = &log_printf;
@@ -330,7 +332,8 @@ plugin_load (char *filename)
new_plugin->buffer_new = &gui_buffer_new;
new_plugin->buffer_search = &gui_buffer_search_by_category_name;
new_plugin->buffer_close = &gui_buffer_close;
- new_plugin->buffer_get = &gui_buffer_get;
+ new_plugin->buffer_get_string = &gui_buffer_get_string;
+ new_plugin->buffer_get_pointer = &gui_buffer_get_pointer;
new_plugin->buffer_set = &gui_buffer_set;
new_plugin->nicklist_add_group = &gui_nicklist_add_group;
@@ -374,7 +377,8 @@ plugin_load (char *filename)
last_weechat_plugin = new_plugin;
/* init plugin */
- if (((t_weechat_init_func *)init_func) (new_plugin) < 0)
+ rc = ((t_weechat_init_func *)init_func) (new_plugin);
+ if (rc != WEECHAT_RC_OK)
{
gui_chat_printf (NULL,
_("%sError: unable to initialize plugin "
@@ -428,11 +432,14 @@ plugin_auto_load_file (void *plugin, char *filename)
{
if (string_strcasecmp (pos,
CONFIG_STRING(config_plugins_extension)) == 0)
+ {
plugin_load (filename);
+ }
}
}
else
plugin_load (filename);
+
return 1;
}
@@ -559,10 +566,15 @@ plugin_remove (struct t_weechat_plugin *plugin)
free (plugin->name);
if (plugin->description)
free (plugin->description);
+ if (plugin->author)
+ free (plugin->author);
if (plugin->version)
free (plugin->version);
+ if (plugin->license)
+ free (plugin->license);
if (plugin->charset)
free (plugin->charset);
+
free (plugin);
weechat_plugins = new_weechat_plugins;
@@ -578,11 +590,12 @@ plugin_unload (struct t_weechat_plugin *plugin)
t_weechat_end_func *end_func;
char *name;
- name = (plugin->name) ? strdup (plugin->name) : strdup ("???");
+ name = (plugin->name) ? strdup (plugin->name) : NULL;
end_func = dlsym (plugin->handle, "weechat_plugin_end");
if (end_func)
(void) (end_func) (plugin);
+
plugin_remove (plugin);
gui_chat_printf (NULL,
@@ -622,7 +635,9 @@ void
plugin_unload_all ()
{
while (weechat_plugins)
+ {
plugin_unload (last_weechat_plugin);
+ }
}
/*
@@ -687,6 +702,9 @@ plugin_end ()
/* unload all plugins */
plugin_unload_all ();
+
+ /* free all plugin options */
+ plugin_config_end ();
}
/*