1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-09 03:03:12 +02:00

core: many improvements on hdata

New features:
- add optional hdata name for variables in hdata
- add plugin API functions: hdata_get_var_hdata
- use hashtable to store hdata (created by WeeChat and plugins)
- free hdata and infolists created by plugin on plugin unload
- free all hdata on exit
- add "free" option to command /debug hdata
- remove hdata for hooks
This commit is contained in:
Sebastien Helleu
2011-06-26 18:15:42 +02:00
parent 2a630031fd
commit 19bc95b961
58 changed files with 2049 additions and 3052 deletions
+60 -66
View File
@@ -65,8 +65,6 @@ struct t_irc_server *last_irc_server = NULL;
struct t_irc_message *irc_recv_msgq = NULL;
struct t_irc_message *irc_msgq_last_msg = NULL;
struct t_hdata *irc_server_hdata_server = NULL;
char *irc_server_option_string[IRC_SERVER_NUM_OPTIONS] =
{ "addresses", "proxy", "ipv6",
"ssl", "ssl_cert", "ssl_priorities", "ssl_dhkey_size", "ssl_verify",
@@ -3949,78 +3947,74 @@ irc_server_hdata_server_cb (void *data, const char *hdata_name)
/* make C compiler happy */
(void) data;
if (irc_server_hdata_server)
return irc_server_hdata_server;
hdata = weechat_hdata_new (hdata_name, "prev_server", "next_server");
if (hdata)
{
irc_server_hdata_server = hdata;
WEECHAT_HDATA_VAR(struct t_irc_server, name, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, options, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, temp_server, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, reloading_from_config, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, reloaded_from_config, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, addresses_count, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, addresses_array, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, ports_array, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, index_current_address, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, current_address, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, current_ip, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, current_port, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, sock, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, hook_connect, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, hook_fd, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, hook_timer_connection, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, hook_timer_sasl, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, is_connected, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, ssl_connected, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, name, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, options, POINTER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, temp_server, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, reloading_from_config, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, reloaded_from_config, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, addresses_count, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, addresses_array, POINTER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, ports_array, POINTER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, index_current_address, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, current_address, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, current_ip, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, current_port, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, sock, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, hook_connect, POINTER, "hook");
WEECHAT_HDATA_VAR(struct t_irc_server, hook_fd, POINTER, "hook");
WEECHAT_HDATA_VAR(struct t_irc_server, hook_timer_connection, POINTER, "hook");
WEECHAT_HDATA_VAR(struct t_irc_server, hook_timer_sasl, POINTER, "hook");
WEECHAT_HDATA_VAR(struct t_irc_server, is_connected, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, ssl_connected, INTEGER, NULL);
#ifdef HAVE_GNUTLS
WEECHAT_HDATA_VAR(struct t_irc_server, gnutls_sess, OTHER);
WEECHAT_HDATA_VAR(struct t_irc_server, tls_cert, OTHER);
WEECHAT_HDATA_VAR(struct t_irc_server, tls_cert_key, OTHER);
WEECHAT_HDATA_VAR(struct t_irc_server, gnutls_sess, OTHER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, tls_cert, OTHER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, tls_cert_key, OTHER, NULL);
#endif
WEECHAT_HDATA_VAR(struct t_irc_server, unterminated_message, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, nicks_count, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, nicks_array, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, nick_first_tried, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, nick, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, nick_modes, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, isupport, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, prefix_modes, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, prefix_chars, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_delay, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_start, TIME);
WEECHAT_HDATA_VAR(struct t_irc_server, command_time, TIME);
WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_join, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, disable_autojoin, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, is_away, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, away_message, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, away_time, TIME);
WEECHAT_HDATA_VAR(struct t_irc_server, lag, INTEGER);
WEECHAT_HDATA_VAR(struct t_irc_server, lag_check_time, OTHER);
WEECHAT_HDATA_VAR(struct t_irc_server, lag_next_check, TIME);
WEECHAT_HDATA_VAR(struct t_irc_server, lag_last_refresh, TIME);
WEECHAT_HDATA_VAR(struct t_irc_server, cmd_list_regexp, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, last_user_message, TIME);
WEECHAT_HDATA_VAR(struct t_irc_server, last_away_check, TIME);
WEECHAT_HDATA_VAR(struct t_irc_server, outqueue, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, last_outqueue, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, redirects, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, last_redirect, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, notify_list, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, last_notify, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, manual_joins, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, buffer, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, buffer_as_string, STRING);
WEECHAT_HDATA_VAR(struct t_irc_server, channels, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, last_channel, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, prev_server, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, next_server, POINTER);
WEECHAT_HDATA_VAR(struct t_irc_server, unterminated_message, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, nicks_count, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, nicks_array, POINTER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, nick_first_tried, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, nick, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, nick_modes, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, isupport, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, prefix_modes, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, prefix_chars, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_delay, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_start, TIME, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, command_time, TIME, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_join, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, disable_autojoin, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, is_away, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, away_message, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, away_time, TIME, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, lag, INTEGER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, lag_check_time, OTHER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, lag_next_check, TIME, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, lag_last_refresh, TIME, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, cmd_list_regexp, POINTER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, last_user_message, TIME, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, last_away_check, TIME, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, outqueue, POINTER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, last_outqueue, POINTER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, redirects, POINTER, "irc_redirect");
WEECHAT_HDATA_VAR(struct t_irc_server, last_redirect, POINTER, "irc_redirect");
WEECHAT_HDATA_VAR(struct t_irc_server, notify_list, POINTER, "irc_notify");
WEECHAT_HDATA_VAR(struct t_irc_server, last_notify, POINTER, "irc_notify");
WEECHAT_HDATA_VAR(struct t_irc_server, manual_joins, POINTER, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, buffer, POINTER, "buffer");
WEECHAT_HDATA_VAR(struct t_irc_server, buffer_as_string, STRING, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, channels, POINTER, "irc_channel");
WEECHAT_HDATA_VAR(struct t_irc_server, last_channel, POINTER, "irc_channel");
WEECHAT_HDATA_VAR(struct t_irc_server, prev_server, POINTER, hdata_name);
WEECHAT_HDATA_VAR(struct t_irc_server, next_server, POINTER, hdata_name);
WEECHAT_HDATA_LIST(irc_servers);
WEECHAT_HDATA_LIST(last_irc_server);
}
return irc_server_hdata_server;
return hdata;
}
/*