diff --git a/src/plugins/irc/irc-channel.c b/src/plugins/irc/irc-channel.c index 072d8122d..ff3d2681a 100644 --- a/src/plugins/irc/irc-channel.c +++ b/src/plugins/irc/irc-channel.c @@ -1420,14 +1420,33 @@ void irc_channel_rejoin (struct t_irc_server *server, struct t_irc_channel *channel, int manual_join, int noswitch) { - char join_args[1024]; + char *join_string; + int length; - snprintf (join_args, sizeof (join_args), "%s%s%s", - channel->name, - (channel->key) ? " " : "", - (channel->key) ? channel->key : ""); - - irc_command_join_server (server, join_args, manual_join, noswitch); + if (channel->key) + { + length = strlen (channel->name) + 1 + strlen (channel->key) + 1; + join_string = malloc (length); + if (join_string) + { + snprintf (join_string, length, "%s %s", + channel->name, + channel->key); + irc_command_join_server (server, join_string, + manual_join, noswitch); + free (join_string); + } + else + { + irc_command_join_server (server, channel->name, + manual_join, noswitch); + } + } + else + { + irc_command_join_server (server, channel->name, + manual_join, noswitch); + } } /* diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c index 20a960fb7..e495eecb2 100644 --- a/src/plugins/irc/irc-protocol.c +++ b/src/plugins/irc/irc-protocol.c @@ -2718,8 +2718,8 @@ IRC_PROTOCOL_CALLBACK(notice) IRC_PROTOCOL_CALLBACK(part) { - char *str_comment, *join_string; - int join_length, local_part, display_host; + char *str_comment; + int local_part, display_host; struct t_irc_channel *ptr_channel; struct t_irc_nick *ptr_nick; struct t_irc_channel_speaking *ptr_nick_speaking; @@ -2832,26 +2832,7 @@ IRC_PROTOCOL_CALLBACK(part) if (ptr_channel->cycle) { ptr_channel->cycle = 0; - if (ptr_channel->key) - { - join_length = strlen (ptr_channel->name) + 1 + - strlen (ptr_channel->key) + 1; - join_string = malloc (join_length); - if (join_string) - { - snprintf (join_string, join_length, "%s %s", - ptr_channel->name, - ptr_channel->key); - irc_command_join_server (server, join_string, 1, 1); - free (join_string); - } - else - irc_command_join_server (server, ptr_channel->name, - 1, 1); - } - else - irc_command_join_server (server, ptr_channel->name, - 1, 1); + irc_channel_rejoin (server, ptr_channel, 1, 1); } else {