diff options
| -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; } |