From dfd9f2e4fc881dbcaa92e4c716ce4561a4d98057 Mon Sep 17 00:00:00 2001 From: michael Date: Mon, 29 Dec 2014 15:12:49 +0000 Subject: [PATCH] - irc.c:irc_send(): fixed bug where over-length messages were not terminated with \n; optimized to not reprint the sendbuffer twice git-svn-id: svn://svn.ircd-hybrid.org/svnroot/hopm/trunk@5193 82007160-df01-0410-b94d-b575c5fd34c7 --- src/irc.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/irc.c b/src/irc.c index 572c243..5c08b9c 100644 --- a/src/irc.c +++ b/src/irc.c @@ -304,19 +304,23 @@ void irc_send(const char *data, ...) { va_list arglist; - char data2[MSGLENMAX]; - char tosend[MSGLENMAX]; + char buf[MSGLENMAX]; + int len = 0; va_start(arglist, data); - vsnprintf(data2, MSGLENMAX, data, arglist); + len = vsnprintf(buf, sizeof(buf), data, arglist); va_end(arglist); if (OPT_DEBUG >= 2) - log_printf("IRC SEND -> %s", data2); + log_printf("IRC SEND -> %s", buf); + + if (len > 510) + len = 510; - snprintf(tosend, MSGLENMAX, "%s\n", data2); + buf[len++] = '\r'; + buf[len++] = '\n'; - if (send(IRC_FD, tosend, strlen(tosend), 0) == -1) + if (send(IRC_FD, buf, len, 0) == -1) { /* Return of -1 indicates error sending data; we reconnect. */ log_printf("IRC -> Error sending data to server\n"); -- 2.30.2