summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2001-09-13 13:06:19 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2001-09-13 13:06:19 +0000
commit8e6f7438934c74aa3b5d4d6dbb7f28e714269524 (patch)
tree1b737996e4035d2740b66cc8655ffffd99af4ef7
parent20e26554cd216d07d59617059d13ab576ff86724 (diff)
downloadirssi-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
-rw-r--r--src/irc/core/irc-nicklist.c21
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);