=================================================================== RCS file: /cvs/mandoc/main.c,v retrieving revision 1.93 retrieving revision 1.94 diff -u -p -r1.93 -r1.94 --- mandoc/main.c 2010/06/29 14:53:14 1.93 +++ mandoc/main.c 2010/06/30 20:32:15 1.94 @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.93 2010/06/29 14:53:14 kristaps Exp $ */ +/* $Id: main.c,v 1.94 2010/06/30 20:32:15 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -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, 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, 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, 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; + level = NULL; + rc = 1; - if (t <= MANDOCERR_ERROR) { - if ( ! (cp->wflags & WARN_WALL)) + 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; + if (t >= MANDOCERR_ERROR) { + with_error = 1; + level = "ERROR"; + } + if (WARN_WERR & cp->wflags) { + with_fatal = 1; + rc = 0; + } + } - fprintf(stderr, "%s:%d:%d: %s", cp->file, - ln, col + 1, mandocerrs[t]); - + 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); }