diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2010-06-30 20:32:15 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2010-06-30 20:32:15 +0000 |
commit | 29b34f0893cc1c3b889a1ebd5475c51e9c39893f (patch) | |
tree | 9cf94b4277f7d3169b09094fa5963966e133ef1b /main.c | |
parent | ede8bcaa90143c5c1db99caeef3eb5c8fafb3ea4 (diff) | |
download | mandoc-29b34f0893cc1c3b889a1ebd5475c51e9c39893f.tar.gz |
improve error reporting:
* avoid error exit code after mere warnings
* add ERROR: and FATAL: to messages when appropriate
* sort the code in mmsg() to make it easier on the eye
* make the mandocerrs[] list easier to maintain
* update a few comments in mandoc.h
ok kristaps@
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 70 |
1 files changed, 43 insertions, 27 deletions
@@ -99,6 +99,9 @@ struct curparse { static const char * const mandocerrs[MANDOCERR_MAX] = { "ok", + + "generic warning", + "text should be uppercase", "sections out of conventional order", "section name repeats", @@ -118,6 +121,9 @@ static const char * const mandocerrs[MANDOCERR_MAX] = { "section not in conventional manual section", "end of line whitespace", "scope open on exit", + + "generic error", + "NAME section must come first", "bad Boolean value", "child violates parent syntax", @@ -149,6 +155,9 @@ static const char * const mandocerrs[MANDOCERR_MAX] = { "missing display type", "line argument(s) will be lost", "body argument(s) will be lost", + + "generic fatal error", + "column syntax is inconsistent", "missing font type", "displays may not be nested", @@ -182,8 +191,8 @@ static void version(void) __attribute__((noreturn)); static int woptions(int *, char *); static const char *progname; -static int with_error; -static int with_warning; +static int with_fatal; +static int with_error; int main(int argc, char *argv[]) @@ -246,7 +255,7 @@ main(int argc, char *argv[]) while (*argv) { ffile(*argv, &curp); - if (with_error && !(curp.fflags & FL_IGN_ERRORS)) + if (with_fatal && !(curp.fflags & FL_IGN_ERRORS)) break; ++argv; } @@ -260,7 +269,7 @@ main(int argc, char *argv[]) if (curp.roff) roff_free(curp.roff); - return((with_warning || with_error) ? + return((with_fatal || with_error) ? EXIT_FAILURE : EXIT_SUCCESS); } @@ -338,7 +347,7 @@ ffile(const char *file, struct curparse *curp) curp->file = file; if (-1 == (curp->fd = open(curp->file, O_RDONLY, 0))) { perror(curp->file); - with_error = 1; + with_fatal = 1; return; } @@ -379,7 +388,7 @@ read_whole_file(struct curparse *curp, struct buf *fb, int *with_mmap) if (-1 == fstat(curp->fd, &st)) { perror(curp->file); - with_error = 1; + with_fatal = 1; return(0); } @@ -394,7 +403,7 @@ read_whole_file(struct curparse *curp, struct buf *fb, int *with_mmap) if (st.st_size >= (1U << 31)) { fprintf(stderr, "%s: input too large\n", curp->file); - with_error = 1; + with_fatal = 1; return(0); } *with_mmap = 1; @@ -438,7 +447,7 @@ read_whole_file(struct curparse *curp, struct buf *fb, int *with_mmap) free(fb->buf); fb->buf = NULL; - with_error = 1; + with_fatal = 1; return(0); } @@ -654,7 +663,7 @@ fdesc(struct curparse *curp) return; bailout: - with_error = 1; + with_fatal = 1; goto cleanup; } @@ -839,30 +848,37 @@ static int mmsg(enum mandocerr t, void *arg, int ln, int col, const char *msg) { struct curparse *cp; + const char *level; + int rc; cp = (struct curparse *)arg; - - if (t <= MANDOCERR_ERROR) { - if ( ! (cp->wflags & WARN_WALL)) + level = NULL; + rc = 1; + + if (t >= MANDOCERR_FATAL) { + with_fatal = 1; + level = "FATAL"; + rc = 0; + } else { + if ( ! (WARN_WALL & cp->wflags)) return(1); - with_warning = 1; - } else - with_error = 1; - - fprintf(stderr, "%s:%d:%d: %s", cp->file, - ln, col + 1, mandocerrs[t]); + if (t >= MANDOCERR_ERROR) { + with_error = 1; + level = "ERROR"; + } + if (WARN_WERR & cp->wflags) { + with_fatal = 1; + rc = 0; + } + } + fprintf(stderr, "%s:%d:%d:", cp->file, ln, col + 1); + if (level) + fprintf(stderr, " %s:", level); + fprintf(stderr, " %s", mandocerrs[t]); if (msg) fprintf(stderr, ": %s", msg); - fputc('\n', stderr); - /* This is superfluous, but whatever. */ - if (t > MANDOCERR_ERROR) - return(0); - if (cp->wflags & WARN_WERR) { - with_error = 1; - return(0); - } - return(1); + return(rc); } |