diff options
| author | Nakidai <nakidai@disroot.org> | 2026-02-04 16:22:52 +0300 |
|---|---|---|
| committer | Nakidai <nakidai@disroot.org> | 2026-02-04 16:42:42 +0300 |
| commit | eba9ea345af1f259bf27936f3d0941ab2a2f5bfb (patch) | |
| tree | 95b86ef2c9f28dc56e0082ad4438375f74636a67 | |
| parent | ce0f41da41a2d97d4a8e7159747464ecef72de4c (diff) | |
| download | libreircd-eba9ea345af1f259bf27936f3d0941ab2a2f5bfb.tar.gz libreircd-eba9ea345af1f259bf27936f3d0941ab2a2f5bfb.zip | |
Allow lf as well as crlf
For configuration it's important to allow IRC messages to end with \n. This also fixes a TODO from a previous commit and allows to connect to ircd using netcat
| -rw-r--r-- | config.irc | 4 | ||||
| -rw-r--r-- | peer.c | 15 |
2 files changed, 12 insertions, 7 deletions
diff --git a/config.irc b/config.irc index 9902de4..d86cc62 100644 --- a/config.irc +++ b/config.irc @@ -1,2 +1,2 @@ -setcreation :Thu Jan 1 1970 at 00:00:00 UTC -setinfo :The best IRC server ever \o/ +setcreation :Thu Jan 1 1970 at 00:00:00 UTC +setinfo :The best IRC server ever \o/ diff --git a/peer.c b/peer.c index e737f82..5ac80aa 100644 --- a/peer.c +++ b/peer.c @@ -37,19 +37,24 @@ handle(struct Peer *peer) { struct Message msg; char *p, *c; + int cr; - while ((p = memmem(peer->buf, sizeof(peer->buf), "\r\n", 2))) + while ((p = memchr(peer->buf, '\n', sizeof(peer->buf)))) { + cr = 0; if (memchr(peer->buf, '\0', p - peer->buf)) { warnx("got 0 from %d", peer->fd); goto next; } + if (p > peer->buf && p[-1] == '\r') + { + --p; + ++cr; + } *p = 0; - if (strchr(peer->buf, '\n') - || strchr(peer->buf, '\r') - || parse_message(peer->buf, &msg)) + if (strchr(peer->buf, '\r') || parse_message(peer->buf, &msg)) { warnx("malformed input from %d", peer->fd); goto next; @@ -60,7 +65,7 @@ handle(struct Peer *peer) if (find(msg.command)(&msg, peer)) return 1; next: - move(peer, p - peer->buf + 2); + move(peer, p - peer->buf + cr + 1); } return 0; } |