From: nhmall Date: Fri, 26 Feb 2021 14:05:52 +0000 (-0500) Subject: read_simplemail() when SERVER_ADMIN_MSG is defined X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=558b7c27d84e7d245aaf72001a5d843e2214c6d8;p=nethack read_simplemail() when SERVER_ADMIN_MSG is defined Some warnings were mentioned Add a prototype ahead of the function Use a non-const copy of SERVER_ADMIN_MSG quick-tested by: - uncommenting the following in include/unixconf.h /* #define SERVER_ADMIN_MSG "adminmsg" */ - building NetHack - creating a test message: echo "server_admin: system is going down at 2 pm" >~/nh/install/games/lib/nethackdir/adminmsg - playtested and received the desired message --- diff --git a/include/extern.h b/include/extern.h index 5a7f11447..1e597124d 100644 --- a/include/extern.h +++ b/include/extern.h @@ -940,7 +940,7 @@ extern void strbuf_append(strbuf_t *, const char *); extern void strbuf_reserve(strbuf_t *, int); extern void strbuf_empty(strbuf_t *); extern void strbuf_nl_to_crlf(strbuf_t *); -extern char *nonconst(const char *, char *); +extern char *nonconst(const char *, char *, size_t); extern int swapbits(int, int, int); extern void shuffle_int_array(int *, int); /* note: the snprintf CPP wrapper includes the "fmt" argument in "..." diff --git a/src/hacklib.c b/src/hacklib.c index 027f18cf1..654e60487 100644 --- a/src/hacklib.c +++ b/src/hacklib.c @@ -1221,12 +1221,12 @@ strbuf_nl_to_crlf(strbuf_t *strbuf) } char * -nonconst(const char *str, char *buf) +nonconst(const char *str, char *buf, size_t bufsz) { char *retval = emptystr; if (str && buf) - if ((int) strlen(str) < BUFSZ - 1) { + if (strlen(str) < (bufsz - 1)) { Strcpy(buf, str); retval = buf; } diff --git a/src/mail.c b/src/mail.c index a3f63b751..751e59ea9 100644 --- a/src/mail.c +++ b/src/mail.c @@ -44,6 +44,9 @@ static boolean md_start(coord *); static boolean md_stop(coord *, coord *); static boolean md_rush(struct monst *, int, int); static void newmail(struct mail_info *); +#if defined(SIMPLE_MAIL) || defined(SERVER_ADMIN_MSG) +static void read_simplemail(char *mbox, boolean adminmsg); +#endif #if !defined(UNIX) && !defined(VMS) int mustgetmail = -1; @@ -659,13 +662,15 @@ ck_server_admin_msg(void) #ifdef SERVER_ADMIN_MSG static struct stat ost,nst; static long lastchk = 0; + char adminbuf[BUFSZ]; if (g.moves < lastchk + SERVER_ADMIN_MSG_CKFREQ) return; lastchk = g.moves; if (!stat(SERVER_ADMIN_MSG, &nst)) { if (nst.st_mtime > ost.st_mtime) - read_simplemail(SERVER_ADMIN_MSG, TRUE); + read_simplemail(nonconst(SERVER_ADMIN_MSG, adminbuf, + sizeof adminbuf), TRUE); ost.st_mtime = nst.st_mtime; } #endif /* SERVER_ADMIN_MSG */