diff options
author | Timo Sirainen <cras@irssi.org> | 2001-09-13 13:06:19 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2001-09-13 13:06:19 +0000 |
commit | 8e6f7438934c74aa3b5d4d6dbb7f28e714269524 (patch) | |
tree | 1b737996e4035d2740b66cc8655ffffd99af4ef7 /src/irc/core | |
parent | 20e26554cd216d07d59617059d13ab576ff86724 (diff) | |
download | irssi-8e6f7438934c74aa3b5d4d6dbb7f28e714269524.zip |
Don't crash if the IRC server doesn't print your nick in /NAMES list after
join.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1796 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/irc/core')
-rw-r--r-- | src/irc/core/irc-nicklist.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c index 5863dcc9..75bc17c2 100644 --- a/src/irc/core/irc-nicklist.c +++ b/src/irc/core/irc-nicklist.c @@ -112,19 +112,28 @@ static void event_names_list(IRC_SERVER_REC *server, const char *data) g_free(params); } -static void event_end_of_names(SERVER_REC *server, const char *data) +static void event_end_of_names(IRC_SERVER_REC *server, const char *data) { char *params, *channel; - CHANNEL_REC *chanrec; - + IRC_CHANNEL_REC *chanrec; + NICK_REC *ownnick; + int nicks; + g_return_if_fail(server != NULL); params = event_get_params(data, 2, NULL, &channel); - chanrec = channel_find(server, channel); + chanrec = irc_channel_find(server, channel); if (chanrec != NULL && !chanrec->names_got) { - nicklist_set_own(chanrec, - nicklist_find(chanrec, server->nick)); + ownnick = nicklist_find(CHANNEL(chanrec), server->nick); + if (ownnick == NULL) { + /* stupid server - assume we have ops + if channel is empty */ + nicks = g_hash_table_size(chanrec->nicks); + irc_nicklist_insert(chanrec, server->nick, + nicks == 0, FALSE, FALSE); + } + nicklist_set_own(CHANNEL(chanrec), ownnick); chanrec->chanop = chanrec->ownnick->op; chanrec->names_got = TRUE; signal_emit("channel joined", 1, chanrec); |