From 2ab477459f5b4fef646cf7fb916b02001a20e8ab Mon Sep 17 00:00:00 2001 From: PatR Date: Mon, 3 Jun 2024 14:16:49 -0700 Subject: [PATCH] DEBUGFILES setup Check getenv("DEBUGFILES") unconditionally during startup rather than waiting until it's needed. Might prevent the static analyzer from getting so aggravated. Most likely not though, but should make debugpline() less fragile if it gets called during a panic or a signal. --- src/files.c | 23 ++++------------------- src/sys.c | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/files.c b/src/files.c index 4e442e094..8c69e9399 100644 --- a/src/files.c +++ b/src/files.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 files.c $NHDT-Date: 1711213887 2024/03/23 17:11:27 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.397 $ */ +/* NetHack 3.7 files.c $NHDT-Date: 1717449127 2024/06/03 21:12:07 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.399 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Derek S. Ray, 2015. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2796,10 +2796,9 @@ cnf_line_EXPLORERS(char *bufp) staticfn boolean cnf_line_DEBUGFILES(char *bufp) { - /* if showdebug() has already been called (perhaps we've added - some debugpline() calls to option processing) and has found - a value for getenv("DEBUGFILES"), don't override that */ - if (sysopt.env_dbgfl <= 0) { + /* might already have a vaule from getenv("DEBUGFILES"); + if so, ignore this value from SYSCF */ + if (!sysopt.env_dbgfl) { if (sysopt.debugfiles) free((genericptr_t) sysopt.debugfiles); sysopt.debugfiles = dupstr(bufp); @@ -4523,20 +4522,6 @@ debugcore(const char *filename, boolean wildcards) if (!filename || !*filename) return FALSE; /* sanity precaution */ - if (sysopt.env_dbgfl == 0) { - /* check once for DEBUGFILES in the environment; - if found, it supersedes the sysconf value - [note: getenv() rather than nh_getenv() since a long value - is valid and doesn't pose any sort of overflow risk here] */ - if ((p = getenv("DEBUGFILES")) != 0) { - if (sysopt.debugfiles) - free((genericptr_t) sysopt.debugfiles); - sysopt.debugfiles = dupstr(p); - sysopt.env_dbgfl = 1; - } else - sysopt.env_dbgfl = -1; - } - debugfiles = sysopt.debugfiles; /* usual case: sysopt.debugfiles will be empty */ if (!debugfiles || !*debugfiles) diff --git a/src/sys.c b/src/sys.c index 7f463c50d..ad2274fbe 100644 --- a/src/sys.c +++ b/src/sys.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 sys.c $NHDT-Date: 1693083254 2023/08/26 20:54:14 $ $NHDT-Branch: keni-crashweb2 $:$NHDT-Revision: 1.63 $ */ +/* NetHack 3.7 sys.c $NHDT-Date: 1717449153 2024/06/03 21:12:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.64 $ */ /* Copyright (c) Kenneth Lorber, Kensington, Maryland, 2008. */ /* NetHack may be freely redistributed. See license for details. */ @@ -20,6 +20,8 @@ struct sysopt sysopt; void sys_early_init(void) { + const char *p; + sysopt.support = (char *) 0; sysopt.recover = (char *) 0; #ifdef SYSCF @@ -27,15 +29,22 @@ sys_early_init(void) #else sysopt.wizards = dupstr(WIZARD_NAME); #endif + + if ((p = getenv("DEBUGFILES")) != 0) { + sysopt.debugfiles = dupstr(p); + sysopt.env_dbgfl = 1; /* prevent sysconf processing from overriding */ + } else { #if defined(SYSCF) || !defined(DEBUGFILES) - sysopt.debugfiles = (char *) 0; + sysopt.debugfiles = (char *) 0; #else - sysopt.debugfiles = dupstr(DEBUGFILES); + sysopt.debugfiles = dupstr(DEBUGFILES); #endif + sysopt.env_dbgfl = 0; + } + #ifdef DUMPLOG sysopt.dumplogfile = (char *) 0; #endif - sysopt.env_dbgfl = 0; /* haven't checked getenv("DEBUGFILES") yet */ sysopt.shellers = (char *) 0; sysopt.explorers = (char *) 0; sysopt.genericusers = (char *) 0; @@ -105,6 +114,7 @@ sysopt_release(void) if (sysopt.debugfiles) free((genericptr_t) sysopt.debugfiles), sysopt.debugfiles = (char *) 0; + sysopt.env_dbgfl = 0; #ifdef DUMPLOG if (sysopt.dumplogfile) free((genericptr_t) sysopt.dumplogfile), sysopt.dumplogfile=(char *) 0;