about summary refs log tree commit diff
path: root/handle.c
diff options
context:
space:
mode:
Diffstat (limited to 'handle.c')
-rw-r--r--handle.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/handle.c b/handle.c
index 53e1c5b..776d839 100644
--- a/handle.c
+++ b/handle.c
@@ -26,7 +26,7 @@
 static int
 join(struct Message *msg, struct Peer *peer)
 {
-	size_t i, j;
+	size_t i;
 
 	/* TODO: support comma separated list of channels, keys */
 	ensure(peer->type, reply(peer, 451), 0);
@@ -34,19 +34,16 @@ join(struct Message *msg, struct Peer *peer)
 	ensure(peer->channels_c != lengthof(peer->channels), reply(peer, 405, msg->params[0]), 0)
 	ensure(*msg->params[0] == '#', reply(peer, 403, msg->params[0]), 0);
 
+	for (i = 0; i < peer->channels_c; ++i)
+		ensure(strcmp(channels[i].name, msg->params[0]), (void)0, 0);
+
 	for (i = 0; i < channels_c; ++i)
 	{
 		if (strcmp(channels[i].name, msg->params[0]))
 			continue;
 
-		for (j = 0; j < channels[i].users_c; ++j)
-			ensure(
-				strcmp(channels[i].users[j]->nick, peer->nick),
-				(void)0,
-				0
-			);
-
-		ensure(!channel_join(&channels[i], peer), reply(peer, 471), 0);
+		if (channel_join(&channels[i], peer))
+			reply(peer, 471);
 		return 0;
 	}