From cfcb3b22245c779eb9d216c2909789e4368cce6a Mon Sep 17 00:00:00 2001 From: Nakidai Date: Tue, 6 Jan 2026 14:40:08 +0300 Subject: Replace for (;;) with goto It reduces indentation, which was quite pointless in that loop --- loop.c | 160 ++++++++++++++++++++++++++++++++--------------------------------- 1 file 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; } -- cgit 1.4.1