From 8e6f7438934c74aa3b5d4d6dbb7f28e714269524 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 13 Sep 2001 13:06:19 +0000 Subject: 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 --- src/irc/core/irc-nicklist.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src/irc/core') 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); -- cgit v1.2.3