diff options
author | Timo Sirainen <cras@irssi.org> | 2000-05-04 10:32:42 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2000-05-04 10:32:42 +0000 |
commit | d3dc9a1307adc40425bf162f1f867a39e535f501 (patch) | |
tree | d3c92a8e431391d679ae5341cb4e865f00449761 /src/irc/core/channel-events.c | |
parent | bacfcb060c1b687f70db4d59797e1cbc8bfe0f62 (diff) | |
download | irssi-d3dc9a1307adc40425bf162f1f867a39e535f501.zip |
.. lots of changes ..
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@197 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/irc/core/channel-events.c')
-rw-r--r-- | src/irc/core/channel-events.c | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/src/irc/core/channel-events.c b/src/irc/core/channel-events.c index 8f11ee47..8de80cbd 100644 --- a/src/irc/core/channel-events.c +++ b/src/irc/core/channel-events.c @@ -95,6 +95,27 @@ static void event_topic(const char *data, IRC_SERVER_REC *server) g_free(params); } +/* Find any unjoined channel that matches `channel'. Long channel names are + also a bit problematic, so find a channel where start of the name matches. */ +static CHANNEL_REC *channel_find_unjoined(IRC_SERVER_REC *server, const char *channel) +{ + GSList *tmp; + int len; + + len = strlen(channel); + for (tmp = server->channels; tmp != NULL; tmp = tmp->next) { + CHANNEL_REC *rec = tmp->data; + + if (rec->joined) continue; + + if (g_strncasecmp(channel, rec->name, len) == 0 && + (len > 20 || rec->name[len] == '\0')) + return rec; + } + + return NULL; +} + static void event_join(const char *data, IRC_SERVER_REC *server, const char *nick, const char *address) { char *params, *channel, *tmp; @@ -120,10 +141,8 @@ static void event_join(const char *data, IRC_SERVER_REC *server, const char *nic !channel here to !ABCDEchannel */ char *shortchan; - shortchan = g_strdup(channel); - sprintf(shortchan, "!%s", channel+6); - - chanrec = channel_find(server, shortchan); + shortchan = g_strdup_printf("!%s", channel+6); + chanrec = channel_find_unjoined(server, shortchan); if (chanrec != NULL) { g_free(chanrec->name); chanrec->name = g_strdup(channel); @@ -132,11 +151,16 @@ static void event_join(const char *data, IRC_SERVER_REC *server, const char *nic g_free(shortchan); } - chanrec = channel_find(server, channel); + chanrec = channel_find_unjoined(server, channel); if (chanrec == NULL) { /* didn't get here with /join command.. */ chanrec = channel_create(server, channel, TRUE); } + chanrec->joined = TRUE; + if (strcmp(chanrec->name, channel) != 0) { + g_free(chanrec->name); + chanrec->name = g_strdup(channel); + } g_free(params); } |