From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (schwarze@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.3/8.14.3) with ESMTP id o5UKWGVX004779 for ; Wed, 30 Jun 2010 16:32:16 -0400 (EDT) Received: (from schwarze@localhost) by krisdoz.my.domain (8.14.3/8.14.3/Submit) id o5UKWGxP012439; Wed, 30 Jun 2010 16:32:16 -0400 (EDT) Date: Wed, 30 Jun 2010 16:32:16 -0400 (EDT) Message-Id: <201006302032.o5UKWGxP012439@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: schwarze@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: improve error reporting: * avoid error exit code after mere X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- 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@ Modified Files: -------------- mdocml: main.c mandoc.h Revision Data ------------- Index: mandoc.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.h,v retrieving revision 1.12 retrieving revision 1.13 diff -Lmandoc.h -Lmandoc.h -u -p -r1.12 -r1.13 --- mandoc.h +++ mandoc.h @@ -25,6 +25,9 @@ __BEGIN_DECLS enum mandocerr { MANDOCERR_OK, + + MANDOCERR_WARNING, /* ===== end of warnings ===== */ + MANDOCERR_UPPERCASE, /* text should be uppercase */ MANDOCERR_SECOOO, /* sections out of conventional order */ MANDOCERR_SECREP, /* section name repeats */ @@ -38,14 +41,15 @@ enum mandocerr { MANDOCERR_NOWIDTHARG, /* argument requires the width argument */ /* FIXME: merge with MANDOCERR_IGNARGV. */ MANDOCERR_WIDTHARG, /* superfluous width argument */ - MANDOCERR_IGNARGV, /* macro ignoring argv */ + MANDOCERR_IGNARGV, /* ignoring argument */ MANDOCERR_BADDATE, /* bad date argument */ MANDOCERR_BADWIDTH, /* bad width argument */ MANDOCERR_BADMSEC, /* unknown manual section */ MANDOCERR_SECMSEC, /* section not in conventional manual section */ MANDOCERR_EOLNSPACE, /* end of line whitespace */ MANDOCERR_SCOPEEXIT, /* scope open on exit */ -#define MANDOCERR_WARNING MANDOCERR_SCOPEEXIT + + MANDOCERR_ERROR, /* ===== end of errors ===== */ MANDOCERR_NAMESECFIRST, /* NAME section must come first */ MANDOCERR_BADBOOL, /* bad Boolean value */ @@ -79,7 +83,8 @@ enum mandocerr { MANDOCERR_DISPTYPE, /* missing display type */ MANDOCERR_ARGSLOST, /* line argument(s) will be lost */ MANDOCERR_BODYLOST, /* body argument(s) will be lost */ -#define MANDOCERR_ERROR MANDOCERR_BODYLOST + + MANDOCERR_FATAL, /* ===== end of fatal errors ===== */ MANDOCERR_COLUMNS, /* column syntax is inconsistent */ /* FIXME: this should be a MANDOCERR_ERROR */ @@ -87,7 +92,7 @@ enum mandocerr { /* FIXME: this should be a MANDOCERR_ERROR */ MANDOCERR_NESTEDDISP, /* displays may not be nested */ MANDOCERR_BADDISP, /* unsupported display type */ - MANDOCERR_SYNTNOSCOPE, /* request scope close w/none open */ + MANDOCERR_SYNTNOSCOPE, /* no scope to rewind: syntax violated */ MANDOCERR_SYNTSCOPE, /* scope broken, syntax violated */ MANDOCERR_SYNTLINESCOPE, /* line scope broken, syntax violated */ MANDOCERR_SYNTARGVCOUNT, /* argument count wrong, violates syntax */ @@ -95,9 +100,8 @@ enum mandocerr { MANDOCERR_SYNTARGCOUNT, /* argument count wrong, violates syntax */ MANDOCERR_NODOCBODY, /* no document body */ MANDOCERR_NODOCPROLOG, /* no document prologue */ - MANDOCERR_UTSNAME, /* utsname() system call failed */ + MANDOCERR_UTSNAME, /* utsname system call failed */ MANDOCERR_MEM, /* memory exhausted */ -#define MANDOCERR_FATAL MANDOCERR_MEM MANDOCERR_MAX }; Index: main.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/main.c,v retrieving revision 1.93 retrieving revision 1.94 diff -Lmain.c -Lmain.c -u -p -r1.93 -r1.94 --- main.c +++ main.c @@ -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[MAN "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[MAN "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 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->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, s 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, s 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, s 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; - - 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); } -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv