]> granicus.if.org Git - nethack/commitdiff
config_error_add()'s terminating period
authorPatR <rankin@nethack.org>
Wed, 6 Jul 2022 06:20:58 +0000 (23:20 -0700)
committerPatR <rankin@nethack.org>
Wed, 6 Jul 2022 06:20:58 +0000 (23:20 -0700)
Have the config error reporting routine check whether the message
it's delivering already has end-of-sentence punctuation instead of
adding that unconditionally.

src/files.c
sys/share/cppregex.cpp

index d49b7b4701c65ef31086cf8defc06ac5e34c32cf..701e062db8de97aedf92cc190583a9113645ff3c 100644 (file)
@@ -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
index 3f2cbe6224930b074896494e8b1e42c24032d233..40ba980da9fd5693452c170ee9df1ff47cc7c5ac 100644 (file)
@@ -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;
 }