about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNakidai <nakidai@disroot.org>2026-01-06 14:40:08 +0300
committerNakidai <nakidai@disroot.org>2026-01-06 14:40:08 +0300
commitcfcb3b22245c779eb9d216c2909789e4368cce6a (patch)
treea0218cdb086bc8a4fa137528ab544e16726e4d6b
parent3a256ec9bd62c3a1d053730c65a8945287e5a8e5 (diff)
downloadlibreircd-cfcb3b22245c779eb9d216c2909789e4368cce6a.tar.gz
libreircd-cfcb3b22245c779eb9d216c2909789e4368cce6a.zip
Replace for (;;) with goto
It reduces indentation, which was quite pointless in that loop
-rw-r--r--loop.c160
1 files changed, 79 insertions, 81 deletions
diff --git a/loop.c b/loop.c
index b2430b8..81ff25d 100644
--- a/loop.c
+++ b/loop.c
@@ -67,96 +67,94 @@ ircd(void)
 		err(1, "listen()");
 
 	signal(SIGPIPE, SIG_IGN);
-	for (peers_c = channels_c = 0;;)
+loop:
+	pfd[peers_c] = (struct pollfd){ .fd = sfd, .events = POLLIN };
+	for (i = 0; i < peers_c; ++i)
+		pfd[i] = (struct pollfd)
+		{
+			.fd = peers[i].fd,
+			.events = POLLIN,
+		};
+	res = poll(pfd, (passed = peers_c) + 1, -1);
+	if (res == -1)
+		err(1, "poll()");
+
+	if (pfd[peers_c].revents & POLLIN)
 	{
-		pfd[peers_c] = (struct pollfd){ .fd = sfd, .events = POLLIN };
-		for (i = 0; i < peers_c; ++i)
-			pfd[i] = (struct pollfd)
-			{
-				.fd = peers[i].fd,
-				.events = POLLIN,
-			};
-		res = poll(pfd, (passed = peers_c) + 1, -1);
-		if (res == -1)
-			err(1, "poll()");
-
-		if (pfd[peers_c].revents & POLLIN)
+		client = accept(sfd, (void *)&clientaddr, &(int){sizeof(clientaddr)});
+		if (client == -1)
 		{
-			client = accept(sfd, (void *)&clientaddr, &(int){sizeof(clientaddr)});
-			if (client == -1)
-			{
-				warn("accept(%d)", sfd);
-			}
-			else if (peers_c == PEERS_MAX)
-			{
-				/*
-				 * TODO: maybe send 005 or smth?
-				 */
-				close(client);
-			}
-			else
-			{
-				peers[peers_c++] = (struct Peer){ .fd = client };
-				strlcpy(
-					peers[peers_c - 1].host,
-					inet_ntoa(clientaddr.sin_addr),
-					sizeof(peers->host)
-				);
-			}
+			warn("accept(%d)", sfd);
 		}
-
-		for (i = 0; i < passed; ++i)
+		else if (peers_c == PEERS_MAX)
 		{
-			if (!(pfd[i].revents & POLLIN))
-				continue;
-
-			recvd = read(
-				peers[i].fd,
-				peers[i].buf + peers[i].recvd,
-				sizeof(peers[i].buf) - peers[i].recvd
-			);
-			peers[i].recvd += recvd;
-			if (recvd == -1 || !recvd || handle(&peers[i]))
-				peers[i].flags |= DELETE;
+			/*
+			 * TODO: maybe send 005 or smth?
+			 */
+			close(client);
 		}
-		for (i = 0; i < peers_c; ++i)
+		else
 		{
-			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
+			peers[peers_c++] = (struct Peer){ .fd = client };
+			strlcpy(
+				peers[peers_c - 1].host,
+				inet_ntoa(clientaddr.sin_addr),
+				sizeof(peers->host)
 			);
-			for (j = 0; j < peers[i].channels_c; ++j)
+		}
+	}
+
+	for (i = 0; i < passed; ++i)
+	{
+		if (!(pfd[i].revents & POLLIN))
+			continue;
+
+		recvd = read(
+			peers[i].fd,
+			peers[i].buf + peers[i].recvd,
+			sizeof(peers[i].buf) - peers[i].recvd
+		);
+		peers[i].recvd += recvd;
+		if (recvd == -1 || !recvd || handle(&peers[i]))
+			peers[i].flags |= DELETE;
+	}
+	for (i = 0; i < peers_c; ++i)
+	{
+		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
+		);
+		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)
+				peers[i].channels[j]->users[k]->flags |= ANNOUNCE;
+		}
+		for (j = 0; j < peers_c; ++j)
+			if (peers[j].flags & ANNOUNCE)
 			{
-				channel_exit(peers[i].channels[j], &peers[i]);
-				for (k = 0; k < peers[i].channels[j]->users_c; ++k)
-					peers[i].channels[j]->users[k]->
-						flags |= ANNOUNCE;
+				writef(
+					peers[j].fd,
+					"%s!%s@%s QUIT",
+					getnick(&peers[i]),
+					peers[i].user,
+					peers[i].host
+				);
+				peers[j].flags &= ~ANNOUNCE;
 			}
-			for (j = 0; j < peers_c; ++j)
-				if (peers[j].flags & ANNOUNCE)
-				{
-					writef(
-						peers[j].fd,
-						"%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];
-			i = 0;
-		}
+		writef(peers[i].fd, "ERROR :Closing Link: %s", peers[i].host);
+		close(peers[i].fd);
+		peers[i] = peers[--peers_c];
+		i = 0;
 	}
+	goto loop;
 }