You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/net-irc/dircproxy/files/1.1.0-less-lag-on-attach.patch

54 lines
1.5 KiB

--- src/irc_client.c 2005-01-06 02:48:12.964637427 +0100
+++ 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 */