about summary refs log tree commit diff
path: root/loop.c
diff options
context:
space:
mode:
Diffstat (limited to 'loop.c')
-rw-r--r--loop.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/loop.c b/loop.c
index 81ff25d..9e91438 100644
--- a/loop.c
+++ b/loop.c
@@ -123,19 +123,18 @@ loop:
 		if (!(peers[i].flags & DELETE))
 			continue;
 
-		if (!peers[i].type)
-			goto skip;
-		writef(
-			peers[i].fd,
-			":%s!%s@%s QUIT",
-			getnick(&peers[i]),
-			peers[i].user,
-			peers[i].host
-		);
+		if (peers[i].type)
+			writef(
+				peers[i].fd,
+				":%s!%s@%s QUIT",
+				getnick(&peers[i]),
+				peers[i].user,
+				peers[i].host
+			);
 		for (j = 0; j < peers[i].channels_c; ++j)
 		{
 			channel_exit(peers[i].channels[j], &peers[i]);
-			for (k = 0; k < peers[i].channels[j]->users_c; ++k)
+			if (peers[i].type) for (k = 0; k < peers[i].channels[j]->users_c; ++k)
 				peers[i].channels[j]->users[k]->flags |= ANNOUNCE;
 		}
 		for (j = 0; j < peers_c; ++j)
@@ -143,17 +142,16 @@ loop:
 			{
 				writef(
 					peers[j].fd,
-					"%s!%s@%s QUIT",
+					":%s!%s@%s QUIT",
 					getnick(&peers[i]),
 					peers[i].user,
 					peers[i].host
 				);
 				peers[j].flags &= ~ANNOUNCE;
 			}
-skip:
 		writef(peers[i].fd, "ERROR :Closing Link: %s", peers[i].host);
 		close(peers[i].fd);
-		peers[i] = peers[--peers_c];
+		user_remove(i);
 		i = 0;
 	}
 	goto loop;