1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
--- 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 */
|