--- a/src/irc_client.c 2005-01-06 02:48:12.964637427 +0100 +++ b/src/irc_client.c.lessflood 2005-01-06 02:47:50.433376383 +0100 @@ -1910,13 +1910,34 @@ /* Recall channel log files, and get channel topic and members from server */ if (p->channels) { struct ircchannel *c; + unsigned int cnames_length = 0; + char *cnames = 0; + + c = p->channels; + while (c) { + if (!c->inactive && !c->unjoined) { + cnames_length += strlen(c->name) + 1; // +1 to hold comma + } + + c = c->next; + } + + if(cnames_length) + { + cnames = (char *)malloc(cnames_length + 1); + memset(cnames, 0, cnames_length + 1); + } c = p->channels; while (c) { if (!c->inactive && !c->unjoined) { ircclient_send_selfcmd(p, "JOIN", ":%s", c->name); - ircserver_send_command(p, "TOPIC", ":%s", c->name); - ircserver_send_command(p, "NAMES", ":%s", c->name); + if(cnames_length) { + if(c == p->channels) // first channel in list + sprintf(cnames, "%s", c->name); + else + sprintf(cnames, "%s,%s", cnames, c->name); + } if (p->conn_class->chan_log_enabled) { irclog_autorecall(p, c->name); @@ -1926,6 +1948,13 @@ c = c->next; } + + if(cnames_length) + { + ircserver_send_command(p, "TOPIC", ":%s", cnames); + ircserver_send_command(p, "NAMES", ":%s", cnames); + free(cnames); + } } /* Recall private log file */