diff options
Diffstat (limited to 'usr.bin/mandoc/main.c')
-rw-r--r-- | usr.bin/mandoc/main.c | 72 |
1 files changed, 44 insertions, 28 deletions
diff --git a/usr.bin/mandoc/main.c b/usr.bin/mandoc/main.c index 2acf3c3c44a..9b336a6e4db 100644 --- a/usr.bin/mandoc/main.c +++ b/usr.bin/mandoc/main.c @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.39 2010/06/29 15:49:52 schwarze Exp $ */ +/* $Id: main.c,v 1.40 2010/06/30 20:29:44 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv> * @@ -88,6 +88,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", @@ -107,6 +110,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", @@ -138,6 +144,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", @@ -171,8 +180,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[]) @@ -235,7 +244,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; } @@ -249,7 +258,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); } @@ -327,7 +336,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; } @@ -368,7 +377,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); } @@ -383,7 +392,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; @@ -427,7 +436,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); } @@ -643,7 +652,7 @@ fdesc(struct curparse *curp) return; bailout: - with_error = 1; + with_fatal = 1; goto cleanup; } @@ -828,30 +837,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); } |