mirror of
https://github.com/weechat/weechat.git
synced 2026-06-12 14:14:48 +02:00
irc: fix add of same channel with and without key in the array list
This commit is contained in:
@@ -92,6 +92,28 @@ irc_join_free_cb (void *data, struct t_arraylist *arraylist, void *pointer)
|
||||
free (ptr_join_chan);
|
||||
}
|
||||
|
||||
/*
|
||||
* Removes all occurrences of a channel from the array list then adds the
|
||||
* join channel (channel + key).
|
||||
*/
|
||||
|
||||
void
|
||||
irc_join_arraylist_add (struct t_arraylist *arraylist,
|
||||
void *pointer)
|
||||
{
|
||||
int index;
|
||||
|
||||
while (1)
|
||||
{
|
||||
weechat_arraylist_search (arraylist, pointer, &index, NULL);
|
||||
if (index < 0)
|
||||
break;
|
||||
weechat_arraylist_remove (arraylist, index);
|
||||
}
|
||||
|
||||
weechat_arraylist_add (arraylist, pointer);
|
||||
}
|
||||
|
||||
/*
|
||||
* Splits join string and returns an array list with a list of
|
||||
* channels/keys.
|
||||
@@ -159,7 +181,7 @@ irc_join_split (struct t_irc_server *server, const char *join)
|
||||
new_channel = (struct t_irc_join_channel *)malloc (sizeof (*new_channel));
|
||||
new_channel->name = strdup (channels[i]);
|
||||
new_channel->key = (i < count_keys) ? strdup (keys[i]) : NULL;
|
||||
weechat_arraylist_add (arraylist, new_channel);
|
||||
irc_join_arraylist_add (arraylist, new_channel);
|
||||
}
|
||||
|
||||
end:
|
||||
@@ -267,7 +289,7 @@ irc_join_add_channel (struct t_irc_server *server,
|
||||
join_chan = (struct t_irc_join_channel *)malloc (sizeof (*join_chan));
|
||||
join_chan->name = strdup (channel_name);
|
||||
join_chan->key = (key && key[0]) ? strdup (key) : NULL;
|
||||
weechat_arraylist_add (arraylist, join_chan);
|
||||
irc_join_arraylist_add (arraylist, join_chan);
|
||||
|
||||
new_join = irc_join_build_string (arraylist);
|
||||
|
||||
@@ -318,7 +340,7 @@ irc_join_add_channels (struct t_irc_server *server,
|
||||
join_chan->name = strdup (ptr_join_chan->name);
|
||||
join_chan->key = (ptr_join_chan->key && ptr_join_chan->key[0]) ?
|
||||
strdup (ptr_join_chan->key) : NULL;
|
||||
weechat_arraylist_add (arraylist, join_chan);
|
||||
irc_join_arraylist_add (arraylist, join_chan);
|
||||
}
|
||||
|
||||
new_join = irc_join_build_string (arraylist);
|
||||
@@ -525,7 +547,7 @@ irc_join_save_channels_to_autojoin (struct t_irc_server *server, int verbose)
|
||||
join_chan->name = strdup (ptr_channel->name);
|
||||
join_chan->key = (ptr_channel->key && ptr_channel->key[0]) ?
|
||||
strdup (ptr_channel->key) : NULL;
|
||||
weechat_arraylist_add (arraylist, join_chan);
|
||||
irc_join_arraylist_add (arraylist, join_chan);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -280,6 +280,9 @@ TEST(IrcJoin, AddChannels)
|
||||
WEE_CHECK_ADD_CHANNELS("#abc,#xyz key_abc", "#xyz", "#abc key_abc");
|
||||
|
||||
WEE_CHECK_ADD_CHANNELS("#abc,#xyz,#def key_abc", "#xyz,#def", "#abc key_abc");
|
||||
|
||||
WEE_CHECK_ADD_CHANNELS("#abc,#chan1,#chan2,#xyz,#chan3 key_abc,key1,key2",
|
||||
"#abc,#xyz,#chan2 key_abc", "#chan1,#chan2,#chan3 key1,key2");
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user