1
0
mirror of https://github.com/irssi/irssi.git synced 2024-10-13 05:03:45 -04:00

Netsplit cleanups. Added /SET netsplit_nicks_hide_threshold.

git-svn-id: http://svn.irssi.org/repos/irssi/trunk@760 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2000-10-14 21:17:45 +00:00 committed by cras
parent 8ed3b5b3fc
commit 6e0d956f3d
3 changed files with 170 additions and 92 deletions

View File

@ -74,7 +74,8 @@ static void hide_output(void)
{
if (!output_hidden) {
output_hidden = TRUE;
signal_add_first("print text stripped", (SIGNAL_FUNC) sig_stop);
signal_add_first("print text stripped",
(SIGNAL_FUNC) sig_stop);
signal_add_first("print text", (SIGNAL_FUNC) sig_stop);
}
}
@ -95,7 +96,8 @@ static NETJOIN_SERVER_REC *netjoin_find_server(IRC_SERVER_REC *server)
return NULL;
}
static NETJOIN_REC *netjoin_add(IRC_SERVER_REC *server, const char *nick, GSList *channels)
static NETJOIN_REC *netjoin_add(IRC_SERVER_REC *server, const char *nick,
GSList *channels)
{
NETJOIN_REC *rec;
NETJOIN_SERVER_REC *srec;
@ -108,7 +110,8 @@ static NETJOIN_REC *netjoin_add(IRC_SERVER_REC *server, const char *nick, GSList
while (channels != NULL) {
NETSPLIT_CHAN_REC *channel = channels->data;
rec->old_channels = g_slist_append(rec->old_channels, g_strdup(channel->name));
rec->old_channels = g_slist_append(rec->old_channels,
g_strdup(channel->name));
channels = channels->next;
}
@ -167,13 +170,15 @@ static void netjoin_server_remove(NETJOIN_SERVER_REC *server)
g_free(server);
}
static void print_channel_netjoins(char *channel, TEMP_PRINT_REC *rec, NETJOIN_SERVER_REC *server)
static void print_channel_netjoins(char *channel, TEMP_PRINT_REC *rec,
NETJOIN_SERVER_REC *server)
{
if (rec->nicks->len > 0)
g_string_truncate(rec->nicks, rec->nicks->len-2);
printformat(server->server, channel, MSGLEVEL_JOINS,
rec->count > netjoin_max_nicks ? IRCTXT_NETSPLIT_JOIN_MORE : IRCTXT_NETSPLIT_JOIN,
rec->count > netjoin_max_nicks ?
IRCTXT_NETSPLIT_JOIN_MORE : IRCTXT_NETSPLIT_JOIN,
rec->nicks->str, rec->count-netjoin_max_nicks);
g_string_free(rec->nicks, TRUE);
@ -191,7 +196,8 @@ static void print_netjoins(NETJOIN_SERVER_REC *server)
/* save nicks to string, clear now_channels and remove the same
channels from old_channels list */
channels = g_hash_table_new((GHashFunc) g_istr_hash, (GCompareFunc) g_istr_equal);
channels = g_hash_table_new((GHashFunc) g_istr_hash,
(GCompareFunc) g_istr_equal);
for (tmp = server->netjoins; tmp != NULL; tmp = next) {
NETJOIN_REC *rec = tmp->data;
@ -204,32 +210,40 @@ static void print_netjoins(NETJOIN_SERVER_REC *server)
if (temp == NULL) {
temp = g_new0(TEMP_PRINT_REC, 1);
temp->nicks = g_string_new(NULL);
g_hash_table_insert(channels, g_strdup(realchannel), temp);
g_hash_table_insert(channels,
g_strdup(realchannel),
temp);
}
temp->count++;
if (temp->count <= netjoin_max_nicks) {
if (*channel == '@')
g_string_append_c(temp->nicks, '@');
g_string_sprintfa(temp->nicks, "%s, ", rec->nick);
g_string_sprintfa(temp->nicks, "%s, ",
rec->nick);
}
/* remove the channel from old_channels too */
old = gslist_find_icase_string(rec->old_channels, realchannel);
old = gslist_find_icase_string(rec->old_channels,
realchannel);
if (old != NULL) {
g_free(old->data);
rec->old_channels = g_slist_remove(rec->old_channels, old->data);
rec->old_channels =
g_slist_remove(rec->old_channels,
old->data);
}
g_free(channel);
rec->now_channels = g_slist_remove(rec->now_channels, channel);
rec->now_channels =
g_slist_remove(rec->now_channels, channel);
}
if (rec->old_channels == NULL)
netjoin_remove(server, rec);
}
g_hash_table_foreach(channels, (GHFunc) print_channel_netjoins, server);
g_hash_table_foreach(channels, (GHFunc) print_channel_netjoins,
server);
g_hash_table_destroy(channels);
if (server->netjoins == NULL)
@ -296,14 +310,18 @@ static void event_join(const char *data, IRC_SERVER_REC *server,
tmp = strchr(channel, 7); /* ^G does something weird.. */
if (tmp != NULL) *tmp = '\0';
if (!ignore_check(SERVER(server), nick, address, channel, NULL, MSGLEVEL_JOINS)) {
if (join_tag == -1)
join_tag = g_timeout_add(1000, (GSourceFunc) sig_check_netjoins, NULL);
if (!ignore_check(SERVER(server), nick, address,
channel, NULL, MSGLEVEL_JOINS)) {
if (join_tag == -1) {
join_tag = g_timeout_add(1000, (GSourceFunc)
sig_check_netjoins, NULL);
}
if (netjoin == NULL)
netjoin = netjoin_add(server, nick, split->channels);
netjoin->now_channels = g_slist_append(netjoin->now_channels, g_strdup(channel));
netjoin->now_channels = g_slist_append(netjoin->now_channels,
g_strdup(channel));
hide_output();
}
g_free(params);
@ -333,7 +351,8 @@ static void event_mode(const char *data, IRC_SERVER_REC *server,
g_return_if_fail(data != NULL);
params = event_get_params(data, 3 | PARAM_FLAG_GETREST, &channel, &mode, &nicks);
params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
&channel, &mode, &nicks);
if (!ischannel(*channel) || addr != NULL) {
g_free(params);
@ -354,7 +373,8 @@ static void event_mode(const char *data, IRC_SERVER_REC *server,
if (*mode == 'o' && *nick != NULL) {
/* give/remove ops */
rec = netjoin_find(server, *nick);
if (rec == NULL || !netjoin_set_operator(rec, channel, type == '+'))
if (rec == NULL ||
!netjoin_set_operator(rec, channel, type == '+'))
show = TRUE;
nick++;
} else {

View File

@ -33,7 +33,7 @@
#define SPLIT_WAIT_TIME 2 /* how many seconds to wait for the QUIT split messages to stop */
static int split_tag;
static int netsplit_max_nicks;
static int netsplit_max_nicks, netsplit_nicks_hide_threshold;
static int get_last_split(IRC_SERVER_REC *server)
{
@ -52,7 +52,7 @@ static int get_last_split(IRC_SERVER_REC *server)
typedef struct {
char *name;
int nick_count;
int nick_count, maxnickpos;
GString *nicks;
} TEMP_SPLIT_CHAN_REC;
@ -62,7 +62,27 @@ typedef struct {
GSList *channels;
} TEMP_SPLIT_REC;
static TEMP_SPLIT_CHAN_REC *find_split_chan(TEMP_SPLIT_REC *rec, const char *name)
static GSList *get_source_servers(const char *server, GSList **servers)
{
GSList *list, *next, *tmp;
list = NULL;
for (tmp = *servers; tmp != NULL; tmp = next) {
NETSPLIT_SERVER_REC *rec = tmp->data;
next = tmp->next;
if (g_strcasecmp(rec->server, server) == 0) {
rec->prints = 0;
list = g_slist_append(list, rec);
*servers = g_slist_remove(*servers, rec);
}
}
return list;
}
static TEMP_SPLIT_CHAN_REC *find_split_chan(TEMP_SPLIT_REC *rec,
const char *name)
{
GSList *tmp;
@ -76,12 +96,14 @@ static TEMP_SPLIT_CHAN_REC *find_split_chan(TEMP_SPLIT_REC *rec, const char *nam
return NULL;
}
static void get_server_splits(void *key, NETSPLIT_REC *split, TEMP_SPLIT_REC *rec)
static void get_server_splits(void *key, NETSPLIT_REC *split,
TEMP_SPLIT_REC *rec)
{
TEMP_SPLIT_CHAN_REC *chanrec;
GSList *tmp;
if (split->printed || g_slist_find(rec->servers, split->server) == NULL)
if (split->printed ||
g_slist_find(rec->servers, split->server) == NULL)
return;
split->printed = TRUE;
@ -104,10 +126,14 @@ static void get_server_splits(void *key, NETSPLIT_REC *split, TEMP_SPLIT_REC *re
split->server->prints++;
chanrec->nick_count++;
if (netsplit_max_nicks <= 0 ||
chanrec->nick_count <= netsplit_max_nicks) {
if (splitchan->nick.op) g_string_append_c(chanrec->nicks, '@');
if (netsplit_nicks_hide_threshold <= 0 ||
chanrec->nick_count <= netsplit_nicks_hide_threshold) {
if (splitchan->nick.op)
g_string_append_c(chanrec->nicks, '@');
g_string_sprintfa(chanrec->nicks, "%s ", split->nick);
if (chanrec->nick_count == netsplit_max_nicks)
chanrec->maxnickpos = chanrec->nicks->len;
}
}
}
@ -122,8 +148,10 @@ static void print_splits(IRC_SERVER_REC *server, TEMP_SPLIT_REC *rec)
for (tmp = rec->servers; tmp != NULL; tmp = tmp->next) {
NETSPLIT_SERVER_REC *rec = tmp->data;
if (rec->prints > 0)
g_string_sprintfa(destservers, "%s, ", rec->destserver);
if (rec->prints > 0) {
g_string_sprintfa(destservers, "%s, ",
rec->destserver);
}
}
if (destservers->len == 0) {
/* no nicks to print in this server */
@ -138,13 +166,17 @@ static void print_splits(IRC_SERVER_REC *server, TEMP_SPLIT_REC *rec)
g_string_truncate(chan->nicks, chan->nicks->len-1);
if (netsplit_max_nicks > 0 && chan->nick_count > netsplit_max_nicks) {
printformat(server, chan->name, MSGLEVEL_QUITS, IRCTXT_NETSPLIT_MORE,
sourceserver, destservers->str, chan->nicks->str,
if (netsplit_max_nicks > 0 &&
chan->nick_count > netsplit_max_nicks) {
g_string_truncate(chan->nicks, chan->maxnickpos);
printformat(server, chan->name, MSGLEVEL_QUITS,
IRCTXT_NETSPLIT_MORE, sourceserver,
destservers->str, chan->nicks->str,
chan->nick_count - netsplit_max_nicks);
} else {
printformat(server, chan->name, MSGLEVEL_QUITS, IRCTXT_NETSPLIT,
sourceserver, destservers->str, chan->nicks->str);
printformat(server, chan->name, MSGLEVEL_QUITS,
IRCTXT_NETSPLIT, sourceserver,
destservers->str, chan->nicks->str);
}
}
@ -160,7 +192,7 @@ static void temp_split_chan_free(TEMP_SPLIT_CHAN_REC *rec)
static int check_server_splits(IRC_SERVER_REC *server)
{
TEMP_SPLIT_REC temp;
GSList *tmp, *next, *servers;
GSList *servers;
time_t last;
g_return_val_if_fail(IS_IRC_SERVER(server), FALSE);
@ -175,25 +207,16 @@ static int check_server_splits(IRC_SERVER_REC *server)
/* get all the splitted servers that have the same
source server */
temp.servers = NULL;
for (tmp = servers; tmp != NULL; tmp = next) {
NETSPLIT_SERVER_REC *rec = tmp->data;
next = tmp->next;
if (g_strcasecmp(rec->server, sserver->server) == 0) {
rec->prints = 0;
temp.servers = g_slist_append(temp.servers, rec);
servers = g_slist_remove(servers, rec);
}
}
temp.servers = get_source_servers(sserver->server, &servers);
temp.server_rec = server;
temp.channels = NULL;
g_hash_table_foreach(server->splits, (GHFunc) get_server_splits, &temp);
g_hash_table_foreach(server->splits,
(GHFunc) get_server_splits, &temp);
print_splits(server, &temp);
g_slist_foreach(temp.channels, (GFunc) temp_split_chan_free, NULL);
g_slist_foreach(temp.channels,
(GFunc) temp_split_chan_free, NULL);
g_slist_free(temp.servers);
g_slist_free(temp.channels);
}
@ -226,13 +249,14 @@ static int sig_check_splits(void)
return 1;
}
static void sig_netsplit_servers(IRC_SERVER_REC *server, NETSPLIT_SERVER_REC *rec)
static void sig_netsplit_servers(IRC_SERVER_REC *server,
NETSPLIT_SERVER_REC *rec)
{
if (!settings_get_bool("hide_netsplit_quits"))
return;
if (split_tag == -1)
split_tag = g_timeout_add(1000, (GSourceFunc) sig_check_splits, NULL);
if (settings_get_bool("hide_netsplit_quits") && split_tag == -1) {
split_tag = g_timeout_add(1000,
(GSourceFunc) sig_check_splits,
NULL);
}
}
static void split_print(const char *nick, NETSPLIT_REC *rec)
@ -252,7 +276,8 @@ static void cmd_netsplit(const char *data, IRC_SERVER_REC *server)
cmd_return_error(CMDERR_NOT_CONNECTED);
if (server->split_servers == NULL) {
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_NO_NETSPLITS);
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
IRCTXT_NO_NETSPLITS);
return;
}
@ -264,15 +289,18 @@ static void cmd_netsplit(const char *data, IRC_SERVER_REC *server)
static void read_settings(void)
{
netsplit_max_nicks = settings_get_int("netsplit_max_nicks");
netsplit_nicks_hide_threshold =
settings_get_int("netsplit_nicks_hide_threshold");
}
void fe_netsplit_init(void)
{
settings_add_int("misc", "netsplit_max_nicks", 10);
settings_add_int("misc", "netsplit_nicks_hide_threshold", 15);
split_tag = -1;
read_settings();
signal_add("netsplit new server", (SIGNAL_FUNC) sig_netsplit_servers);
signal_add("netsplit server new", (SIGNAL_FUNC) sig_netsplit_servers);
signal_add("setup changed", (SIGNAL_FUNC) read_settings);
command_bind("netsplit", NULL, (SIGNAL_FUNC) cmd_netsplit);
}
@ -281,7 +309,7 @@ void fe_netsplit_deinit(void)
{
if (split_tag != -1) g_source_remove(split_tag);
signal_remove("netsplit new server", (SIGNAL_FUNC) sig_netsplit_servers);
signal_remove("netsplit server new", (SIGNAL_FUNC) sig_netsplit_servers);
signal_remove("setup changed", (SIGNAL_FUNC) read_settings);
command_unbind("netsplit", (SIGNAL_FUNC) cmd_netsplit);
}

View File

@ -27,14 +27,18 @@
#include "netsplit.h"
/* How long to keep netsplits in memory (seconds) */
#define NETSPLIT_MAX_REMEMBER (60*30)
#define NETSPLIT_MAX_REMEMBER (60*60)
static int split_tag;
static NETSPLIT_SERVER_REC *netsplit_server_find(IRC_SERVER_REC *server, const char *servername, const char *destserver)
static NETSPLIT_SERVER_REC *netsplit_server_find(IRC_SERVER_REC *server,
const char *servername,
const char *destserver)
{
GSList *tmp;
g_return_val_if_fail(IS_IRC_SERVER(server), NULL);
for (tmp = server->split_servers; tmp != NULL; tmp = tmp->next) {
NETSPLIT_SERVER_REC *rec = tmp->data;
@ -46,10 +50,14 @@ static NETSPLIT_SERVER_REC *netsplit_server_find(IRC_SERVER_REC *server, const c
return NULL;
}
static NETSPLIT_SERVER_REC *netsplit_server_create(IRC_SERVER_REC *server, const char *servername, const char *destserver)
static NETSPLIT_SERVER_REC *netsplit_server_create(IRC_SERVER_REC *server,
const char *servername,
const char *destserver)
{
NETSPLIT_SERVER_REC *rec;
g_return_val_if_fail(IS_IRC_SERVER(server), NULL);
rec = netsplit_server_find(server, servername, destserver);
if (rec != NULL) {
rec->last = time(NULL);
@ -62,21 +70,27 @@ static NETSPLIT_SERVER_REC *netsplit_server_create(IRC_SERVER_REC *server, const
rec->destserver = g_strdup(destserver);
server->split_servers = g_slist_append(server->split_servers, rec);
signal_emit("netsplit new server", 2, server, rec);
signal_emit("netsplit server new", 2, server, rec);
return rec;
}
static void netsplit_destroy_server(IRC_SERVER_REC *server, NETSPLIT_SERVER_REC *rec)
static void netsplit_server_destroy(IRC_SERVER_REC *server,
NETSPLIT_SERVER_REC *rec)
{
g_return_if_fail(IS_IRC_SERVER(server));
server->split_servers = g_slist_remove(server->split_servers, rec);
signal_emit("netsplit server remove", 2, server, rec);
g_free(rec->server);
g_free(rec->destserver);
g_free(rec);
}
static NETSPLIT_REC *netsplit_add(IRC_SERVER_REC *server, const char *nick, const char *address, const char *servers)
static NETSPLIT_REC *netsplit_add(IRC_SERVER_REC *server, const char *nick,
const char *address, const char *servers)
{
NETSPLIT_REC *rec;
NETSPLIT_CHAN_REC *splitchan;
@ -84,7 +98,7 @@ static NETSPLIT_REC *netsplit_add(IRC_SERVER_REC *server, const char *nick, cons
GSList *tmp;
char *p, *dupservers;
g_return_val_if_fail(server != NULL, NULL);
g_return_val_if_fail(IS_IRC_SERVER(server), NULL);
g_return_val_if_fail(nick != NULL, NULL);
g_return_val_if_fail(address != NULL, NULL);
@ -93,7 +107,8 @@ static NETSPLIT_REC *netsplit_add(IRC_SERVER_REC *server, const char *nick, cons
p = strchr(dupservers, ' ');
if (p == NULL) {
g_free(dupservers);
g_return_val_if_fail(p != NULL, NULL);
g_warning("netsplit_add() : only one server found");
return NULL;
}
*p++ = '\0';
@ -122,7 +137,7 @@ static NETSPLIT_REC *netsplit_add(IRC_SERVER_REC *server, const char *nick, cons
}
if (rec->channels == NULL)
g_warning("netsplit_add(): channels == NULL ??");
g_warning("netsplit_add(): nick not in any channels");
g_hash_table_insert(server->splits, rec->nick, rec);
@ -134,6 +149,7 @@ static void netsplit_destroy(IRC_SERVER_REC *server, NETSPLIT_REC *rec)
{
GSList *tmp;
g_return_if_fail(IS_IRC_SERVER(server));
g_return_if_fail(rec != NULL);
signal_emit("netsplit remove", 1, rec);
@ -145,36 +161,44 @@ static void netsplit_destroy(IRC_SERVER_REC *server, NETSPLIT_REC *rec)
}
if (--rec->server->count == 0)
netsplit_destroy_server(server, rec->server);
netsplit_server_destroy(server, rec->server);
g_free(rec->nick);
g_free(rec->address);
g_free(rec);
}
static void netsplit_destroy_hash(void *key, NETSPLIT_REC *rec, IRC_SERVER_REC *server)
static void netsplit_destroy_hash(void *key, NETSPLIT_REC *rec,
IRC_SERVER_REC *server)
{
netsplit_destroy(server, rec);
}
NETSPLIT_REC *netsplit_find(IRC_SERVER_REC *server, const char *nick, const char *address)
NETSPLIT_REC *netsplit_find(IRC_SERVER_REC *server, const char *nick,
const char *address)
{
NETSPLIT_REC *rec;
g_return_val_if_fail(server != NULL, NULL);
g_return_val_if_fail(IS_IRC_SERVER(server), NULL);
g_return_val_if_fail(nick != NULL, NULL);
rec = g_hash_table_lookup(server->splits, nick);
if (rec == NULL) return NULL;
return (address == NULL || g_strcasecmp(rec->address, address) == 0) ? rec : NULL;
return (address == NULL ||
g_strcasecmp(rec->address, address) == 0) ? rec : NULL;
}
NICK_REC *netsplit_find_channel(IRC_SERVER_REC *server, const char *nick, const char *address, const char *channel)
NICK_REC *netsplit_find_channel(IRC_SERVER_REC *server, const char *nick,
const char *address, const char *channel)
{
NETSPLIT_REC *rec;
GSList *tmp;
g_return_val_if_fail(IS_IRC_SERVER(server), NULL);
g_return_val_if_fail(nick != NULL, NULL);
g_return_val_if_fail(channel != NULL, NULL);
rec = netsplit_find(server, nick, address);
if (rec == NULL) return NULL;
@ -200,11 +224,12 @@ int quitmsg_is_split(const char *msg)
/* must have only two words */
p = strchr(msg, ' ');
if (p == NULL || p == msg || strchr(p+1, ' ') != NULL) return FALSE;
if (p == NULL || p == msg || strchr(p+1, ' ') != NULL)
return FALSE;
/* check that it looks ok.. */
if (!match_wildcards("*.* *.*", msg) ||
match_wildcards("*..*", msg) || strstr(msg, "))") != NULL)
strstr(msg, "..") != NULL || strstr(msg, "))") != NULL)
return FALSE;
/* get the two hosts */
@ -217,7 +242,8 @@ int quitmsg_is_split(const char *msg)
p = strrchr(host1, '.');
if (p != NULL && (strlen(p+1) == 2 || strlen(p+1) == 3)) {
p = strrchr(host2, '.');
if (p != NULL && (strlen(p+1) == 2 || strlen(p+1) == 3)) {
if (p != NULL && (strlen(p+1) == 2 ||
strlen(p+1) == 3)) {
/* it looks just like a netsplit to me. */
ok = TRUE;
}
@ -230,17 +256,12 @@ int quitmsg_is_split(const char *msg)
static void split_set_timeout(void *key, NETSPLIT_REC *rec, NETSPLIT_REC *orig)
{
if (rec == orig) {
/* original nick, destroy it in a few seconds.. */
rec->destroy = time(NULL)+4;
} else if (g_strcasecmp(rec->server->server, orig->server->server) == 0 &&
g_strcasecmp(rec->server->destserver, orig->server->destserver) == 0) {
/* same servers -> split over -> destroy old records sooner.. */
rec->destroy = time(NULL)+60;
}
/* same servers -> split over -> destroy old records sooner.. */
rec->destroy = time(NULL)+60;
}
static void event_join(const char *data, IRC_SERVER_REC *server, const char *nick, const char *address)
static void event_join(const char *data, IRC_SERVER_REC *server,
const char *nick, const char *address)
{
NETSPLIT_REC *rec;
@ -251,16 +272,18 @@ static void event_join(const char *data, IRC_SERVER_REC *server, const char *nic
/* yep, looks like it is. for same people that had the same
splitted servers set the timeout to one minute.
.. if the user just changed server, he/she can't use the
.. if the user just changed server, she can't use the
same nick (unless the server is broken) so don't bother
checking that the nick's server matches the split. */
g_hash_table_foreach(server->splits, (GHFunc) split_set_timeout, rec);
g_hash_table_foreach(server->splits,
(GHFunc) split_set_timeout, rec);
}
}
/* remove the nick from netsplit, but do it last so that other "event join"
signal handlers can check if the join was a netjoin */
static void event_join_last(const char *data, IRC_SERVER_REC *server, const char *nick, const char *address)
static void event_join_last(const char *data, IRC_SERVER_REC *server,
const char *nick, const char *address)
{
NETSPLIT_REC *rec;
@ -271,7 +294,8 @@ static void event_join_last(const char *data, IRC_SERVER_REC *server, const char
}
}
static void event_quit(const char *data, IRC_SERVER_REC *server, const char *nick, const char *address)
static void event_quit(const char *data, IRC_SERVER_REC *server,
const char *nick, const char *address)
{
g_return_if_fail(data != NULL);
@ -289,11 +313,13 @@ static void sig_disconnected(IRC_SERVER_REC *server)
if (!IS_IRC_SERVER(server))
return;
g_hash_table_foreach(server->splits, (GHFunc) netsplit_destroy_hash, server);
g_hash_table_foreach(server->splits,
(GHFunc) netsplit_destroy_hash, server);
g_hash_table_destroy(server->splits);
}
static int split_server_check(void *key, NETSPLIT_REC *rec, IRC_SERVER_REC *server)
static int split_server_check(void *key, NETSPLIT_REC *rec,
IRC_SERVER_REC *server)
{
/* Check if this split record is too old.. */
if (rec->destroy > time(NULL))
@ -310,8 +336,12 @@ static int split_check_old(void)
for (tmp = servers; tmp != NULL; tmp = tmp->next) {
IRC_SERVER_REC *server = tmp->data;
if (IS_IRC_SERVER(server))
g_hash_table_foreach_remove(server->splits, (GHRFunc) split_server_check, server);
if (!IS_IRC_SERVER(server))
continue;
g_hash_table_foreach_remove(server->splits,
(GHRFunc) split_server_check,
server);
}
return 1;