From a1567e8417f169edf6c71532dc11bfa763ac444b Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Fri, 20 Aug 2010 01:02:07 +0000 Subject: Implement a simple, consistent user interface for error handling. We now have sufficient practical experience to know what we want, so this is intended to be final: - provide -Wlevel (warning, error or fatal) to select what you care about - provide -Wstop to stop after parsing a file with warnings you care about - provide consistent exit status codes for those warnings you care about - fully document what warnings, errors and fatal errors mean - remove all other cruft from the user interface, less is more: - remove all -f knobs along with the whole -f option - remove the old -Werror because calling warnings "fatal" is silly - always finish parsing each file, unless fatal errors prevent that This commit also includes a couple of related simplifications behind the scenes regarding error handling. Feedback and OK kristaps@; Joerg Sonnenberger (NetBSD) and Sascha Wildner (DragonFly BSD) agree with the general direction. --- mdoc.c | 37 +++++++------------------------------ 1 file changed, 7 insertions(+), 30 deletions(-) (limited to 'mdoc.c') diff --git a/mdoc.c b/mdoc.c index d55b1120..f8b09f7a 100644 --- a/mdoc.c +++ b/mdoc.c @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.162 2010/08/08 14:51:32 schwarze Exp $ */ +/* $Id: mdoc.c,v 1.163 2010/08/20 01:02:07 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons * Copyright (c) 2010 Ingo Schwarze @@ -98,8 +98,6 @@ static int node_append(struct mdoc *, struct mdoc_node *); static int mdoc_ptext(struct mdoc *, int, char *, int); static int mdoc_pmacro(struct mdoc *, int, char *, int); -static int macrowarn(struct mdoc *, int, - const char *, int); const struct mdoc_node * @@ -191,8 +189,7 @@ mdoc_free(struct mdoc *mdoc) * Allocate volatile and non-volatile parse resources. */ struct mdoc * -mdoc_alloc(struct regset *regs, void *data, - int pflags, mandocmsg msg) +mdoc_alloc(struct regset *regs, void *data, mandocmsg msg) { struct mdoc *p; @@ -200,7 +197,6 @@ mdoc_alloc(struct regset *regs, void *data, p->msg = msg; p->data = data; - p->pflags = pflags; p->regs = regs; mdoc_hash_init(); @@ -727,21 +723,6 @@ mdoc_ptext(struct mdoc *m, int line, char *buf, int offs) } -static int -macrowarn(struct mdoc *m, int ln, const char *buf, int offs) -{ - int rc; - - rc = mdoc_vmsg(m, MANDOCERR_MACRO, ln, offs, - "unknown macro: %s%s", - buf, strlen(buf) > 3 ? "..." : ""); - - /* FIXME: logic should be in driver. */ - /* FIXME: broken, will error out and not omit a message. */ - return(MDOC_IGN_MACRO & m->pflags ? rc : 0); -} - - /* * Parse a macro line, that is, a line beginning with the control * character. @@ -785,15 +766,11 @@ mdoc_pmacro(struct mdoc *m, int ln, char *buf, int offs) mac[j++] = buf[i++]; mac[j] = '\0'; - if (j == 4 || j < 2) { - if ( ! macrowarn(m, ln, mac, sv)) - goto err; - return(1); - } - - if (MDOC_MAX == (tok = mdoc_hash_find(mac))) { - if ( ! macrowarn(m, ln, mac, sv)) - goto err; + tok = (j > 1 || j < 4) ? mdoc_hash_find(mac) : MDOC_MAX; + if (MDOC_MAX == tok) { + mdoc_vmsg(m, MANDOCERR_MACRO, ln, sv, + "unknown macro: %s%s", + buf, strlen(buf) > 3 ? "..." : ""); return(1); } -- cgit v1.2.3