]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandoc_msg.c
Finally delete support for the "_whatdb" configuration directive,
[mandoc.git] / mandoc_msg.c
index 5dfa26d1f6f71dc1527daa7b4527ca1aaf3f4f88..4a3e5203b338c9c4fb034b5c956ab441d1ddb3d1 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: mandoc_msg.c,v 1.4 2018/12/16 00:21:05 schwarze Exp $ */
+/*     $Id: mandoc_msg.c,v 1.10 2020/01/19 18:02:00 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014,2015,2016,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2014-2020 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -15,6 +15,8 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
+#include "config.h"
+
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -27,8 +29,8 @@ static        const enum mandocerr lowest_type[MANDOCLEVEL_MAX] = {
        MANDOCERR_WARNING,
        MANDOCERR_ERROR,
        MANDOCERR_UNSUPP,
-       MANDOCERR_MAX,
-       MANDOCERR_MAX
+       MANDOCERR_BADARG,
+       MANDOCERR_SYSERR
 };
 
 static const char *const level_name[MANDOCLEVEL_MAX] = {
@@ -81,7 +83,7 @@ static        const char *const type_message[MANDOCERR_MAX] = {
        "missing manual title, using \"\"",
        "missing manual section, using \"\"",
        "unknown manual section",
-       "missing date, using today's date",
+       "missing date, using \"\"",
        "cannot parse date, using it verbatim",
        "date in the future, using it anyway",
        "missing Os macro, using \"\"",
@@ -191,7 +193,6 @@ static      const char *const type_message[MANDOCERR_MAX] = {
        "data block open at end of tbl",
 
        /* related to document structure and macros */
-       NULL,
        "duplicate prologue macro",
        "skipping late title macro",
        "input stack limit exceeded, infinite loop?",
@@ -222,6 +223,7 @@ static      const char *const type_message[MANDOCERR_MAX] = {
        "excessive shift",
        "NOT IMPLEMENTED: .so with absolute path or \"..\"",
        ".so request failed",
+       "skipping tag containing whitespace",
        "skipping all arguments",
        "skipping excess arguments",
        "divide by zero",
@@ -238,11 +240,40 @@ static    const char *const type_message[MANDOCERR_MAX] = {
        "eqn delim option in tbl",
        "unsupported tbl layout modifier",
        "ignoring macro in table",
+
+       /* bad command line arguments */
+       NULL,
+       "bad command line argument",
+       "duplicate command line argument",
+       "option has a superfluous value",
+       "missing option value",
+       "bad option value",
+       "duplicate option value",
+       "no such tag",
+
+       /* system errors */
+       NULL,
+       "dup",
+       "exec",
+       "fdopen",
+       "fflush",
+       "fork",
+       "fstat",
+       "getline",
+       "glob",
+       "gzclose",
+       "gzdopen",
+       "mkstemp",
+       "open",
+       "pledge",
+       "read",
+       "wait",
+       "write",
 };
 
-static FILE            *fileptr = stderr;
+static FILE            *fileptr = NULL;
 static const char      *filename = NULL;
-static enum mandocerr   min_type = MANDOCERR_MAX;
+static enum mandocerr   min_type = MANDOCERR_BADARG;
 static enum mandoclevel rc = MANDOCLEVEL_OK;
 
 
@@ -295,10 +326,10 @@ mandoc_msg(enum mandocerr t, int line, int col, const char *fmt, ...)
        va_list                  ap;
        enum mandoclevel         level;
 
-       if (t < min_type && t != MANDOCERR_FILE)
+       if (t < min_type)
                return;
 
-       level = MANDOCLEVEL_UNSUPP;
+       level = MANDOCLEVEL_SYSERR;
        while (t < lowest_type[level])
                level--;
        mandoc_msg_setrc(level);
@@ -325,3 +356,12 @@ mandoc_msg(enum mandocerr t, int line, int col, const char *fmt, ...)
        }
        fputc('\n', fileptr);
 }
+
+void
+mandoc_msg_summary(void)
+{
+       if (fileptr != NULL && rc != MANDOCLEVEL_OK)
+               fprintf(fileptr,
+                   "%s: see above the output for %s messages\n",
+                   getprogname(), level_name[rc]);
+}