From: PatR Date: Wed, 6 Jul 2022 06:20:58 +0000 (-0700) Subject: config_error_add()'s terminating period X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ab32ec4ad636385b8c2e590352fa72aead27e392;p=nethack config_error_add()'s terminating period Have the config error reporting routine check whether the message it's delivering already has end-of-sentence punctuation instead of adding that unconditionally. --- diff --git a/src/files.c b/src/files.c index d49b7b470..701e062db 100644 --- a/src/files.c +++ b/src/files.c @@ -2937,15 +2937,21 @@ void config_erradd(const char *buf) { char lineno[QBUFSZ]; + const char *punct; if (!buf || !*buf) buf = "Unknown error"; + /* if buf[] doesn't end in a period, exclamation point, or question mark, + we'll include a period (in the message, not appended to buf[]) */ + punct = eos((char *) buf) - 1; /* eos(buf)-1 is valid; cast away const */ + punct = index(".!?", *punct) ? "" : "."; + if (!g.program_state.config_error_ready) { /* either very early, where pline() will use raw_print(), or player gave bad value when prompted by interactive 'O' command */ - pline("%s%s.", !iflags.window_inited ? "config_error_add: " : "", - buf); + pline("%s%s%s", !iflags.window_inited ? "config_error_add: " : "", + buf, punct); wait_synch(); return; } @@ -2971,8 +2977,8 @@ config_erradd(const char *buf) } else lineno[0] = '\0'; - pline("%s %s%s.", config_error_data->secure ? "Error:" : " *", - lineno, buf); + pline("%s %s%s%s", config_error_data->secure ? "Error:" : " *", + lineno, buf, punct); } int diff --git a/sys/share/cppregex.cpp b/sys/share/cppregex.cpp index 3f2cbe622..40ba980da 100644 --- a/sys/share/cppregex.cpp +++ b/sys/share/cppregex.cpp @@ -51,18 +51,10 @@ regex_error_desc(struct nhregex *re, char *errbuf) } else if (!re->err) { Strcpy(errbuf, "no explanation"); } else { - char *p; - errbuf[0] = '\0'; (void) strncat(errbuf, re->err->what(), BUFSZ - 1); if (!errbuf[0]) Strcpy(errbuf, "unspecified regexp error"); - - /* caller will pass our result to config_error_add() and it adds - sentence ending period, so if the regex class error explanation - already ends in a period, strip that off */ - if ((p = strrchr(errbuf, '.')) != 0 && !p[1]) - *p = '\0'; } return errbuf; }