From e933f93a89986fa181a75d59623792d2288ba8a1 Mon Sep 17 00:00:00 2001 From: fgsfds Date: Sun, 11 Aug 2019 03:28:48 +0300 Subject: [PATCH] Master: Support multiline message files --- src/mastersrv/master.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/mastersrv/master.c b/src/mastersrv/master.c index ce98cfc..304f6b5 100644 --- a/src/mastersrv/master.c +++ b/src/mastersrv/master.c @@ -50,8 +50,8 @@ struct ms_server_s { typedef struct ms_server_s ms_server; const char ms_game_ver[] = "0.63"; -char ms_motd[256] = ""; -char ms_urgent[256] = ""; +char ms_motd[255] = ""; +char ms_urgent[255] = ""; int ms_port = 25660; int ms_timeout = 100000; @@ -141,10 +141,18 @@ void d_getargs (int argc, char *argv[]) { int d_readtextfile (const char *fname, char *buf, size_t max) { FILE *f = fopen(fname, "r"); + char *const end = buf + max - 1; + char *p = buf; if (f) { - char line[256] = { 0 }; - while(fgets(buffer, sizeof(line), (FILE*) fp)) - printf("%s\n", buffer); + char ln[max]; + char *const lend = ln + max - 1; + while(p < end && fgets(ln, sizeof(ln), f)) { + for (char *n = ln; n < lend && *n && *n != '\r' && *n != '\n'; ++n) { + *(p++) = *n; + if (p == end) break; + } + } + *p = '\0'; fclose(f); return 0; } -- 2.29.2