=================================================================== RCS file: /cvs/docbook2mdoc/parse.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -p -r1.28 -r1.29 --- docbook2mdoc/parse.c 2019/04/09 13:35:29 1.28 +++ docbook2mdoc/parse.c 2019/04/09 15:23:51 1.29 @@ -1,4 +1,4 @@ -/* $Id: parse.c,v 1.28 2019/04/09 13:35:29 schwarze Exp $ */ +/* $Id: parse.c,v 1.29 2019/04/09 15:23:51 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -280,16 +280,24 @@ static void parse_fd(struct parse *, int); static void +fatal(struct parse *p) +{ + fprintf(stderr, "%s:%d:%d: FATAL: ", p->fname, p->line, p->col); + perror(NULL); + exit(6); +} + +static void error_msg(struct parse *p, const char *fmt, ...) { va_list ap; - fprintf(stderr, "%s:%d:%d: ", p->fname, p->line, p->col); + fprintf(stderr, "%s:%d:%d: ERROR: ", p->fname, p->line, p->col); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); fputc('\n', stderr); - p->tree->flags |= TREE_FAIL; + p->tree->flags |= TREE_ERROR; } static void @@ -300,11 +308,12 @@ warn_msg(struct parse *p, const char *fmt, ...) if ((p->flags & PFLAG_WARN) == 0) return; - fprintf(stderr, "%s:%d:%d: warning: ", p->fname, p->line, p->col); + fprintf(stderr, "%s:%d:%d: WARNING: ", p->fname, p->line, p->col); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); fputc('\n', stderr); + p->tree->flags |= TREE_WARN; } /* @@ -327,10 +336,8 @@ xml_char(struct parse *ps, const char *p, int sz) } if (ps->cur->node != NODE_TEXT) { - if ((dat = calloc(1, sizeof(*dat))) == NULL) { - perror(NULL); - exit(1); - } + if ((dat = calloc(1, sizeof(*dat))) == NULL) + fatal(ps); dat->node = NODE_TEXT; dat->spc = (ps->flags & PFLAG_SPC) != 0; dat->parent = ps->cur; @@ -348,11 +355,8 @@ xml_char(struct parse *ps, const char *p, int sz) assert(sz >= 0); newsz = ps->cur->bsz + (ps->cur->bsz && (ps->flags & PFLAG_SPC)) + sz; - ps->cur->b = realloc(ps->cur->b, newsz + 1); - if (ps->cur->b == NULL) { - perror(NULL); - exit(1); - } + if ((ps->cur->b = realloc(ps->cur->b, newsz + 1)) == NULL) + fatal(ps); if (ps->cur->bsz && (ps->flags & PFLAG_SPC)) ps->cur->b[ps->cur->bsz++] = ' '; memcpy(ps->cur->b + ps->cur->bsz, p, sz); @@ -420,10 +424,8 @@ xml_entity(struct parse *p, const char *name) if ((ccp = pnode_getattr_raw(dat, ATTRKEY_DEFINITION, NULL)) == NULL) continue; - if ((cp = strdup(ccp)) == NULL) { - perror(NULL); - exit(1); - } + if ((cp = strdup(ccp)) == NULL) + fatal(p); pstate = PARSE_ELEM; parse_string(p, cp, strlen(cp), &pstate, 0); p->flags &= ~PFLAG_SPC; @@ -437,10 +439,8 @@ xml_entity(struct parse *p, const char *name) /* Create, append, and close out an entity node. */ if ((dat = calloc(1, sizeof(*dat))) == NULL || - (dat->b = dat->real = strdup(entity->roff)) == NULL) { - perror(NULL); - exit(1); - } + (dat->b = dat->real = strdup(entity->roff)) == NULL) + fatal(p); dat->node = NODE_ESCAPE; dat->bsz = strlen(dat->b); dat->spc = (p->flags & PFLAG_SPC) != 0; @@ -503,10 +503,8 @@ xml_elem_start(struct parse *ps, const char *name) if (ps->tree->flags & TREE_CLOSED && ps->cur->parent == NULL) warn_msg(ps, "element after end of document: <%s>", name); - if ((dat = calloc(1, sizeof(*dat))) == NULL) { - perror(NULL); - exit(1); - } + if ((dat = calloc(1, sizeof(*dat))) == NULL) + fatal(ps); /* * Nodes that begin a new macro or request line or start by @@ -595,20 +593,17 @@ xml_attrkey(struct parse *ps, const char *name) ps->flags &= ~PFLAG_ATTR; return; } - if ((attr = calloc(1, sizeof(*attr))) == NULL) { - perror(NULL); - exit(1); - } + if ((attr = calloc(1, sizeof(*attr))) == NULL) + fatal(ps); + attr->key = key; attr->val = ATTRVAL__MAX; if (value == NULL) { attr->rawval = NULL; ps->flags |= PFLAG_ATTR; } else { - if ((attr->rawval = strdup(value)) == NULL) { - perror(NULL); - exit(1); - } + if ((attr->rawval = strdup(value)) == NULL) + fatal(ps); ps->flags &= ~PFLAG_ATTR; } TAILQ_INSERT_TAIL(&ps->cur->attrq, attr, child); @@ -627,10 +622,8 @@ xml_attrval(struct parse *ps, const char *name) if ((attr = TAILQ_LAST(&ps->cur->attrq, pattrq)) == NULL) return; if ((attr->val = attrval_parse(name)) == ATTRVAL__MAX && - (attr->rawval = strdup(name)) == NULL) { - perror(NULL); - exit(1); - } + (attr->rawval = strdup(name)) == NULL) + fatal(ps); ps->flags &= ~PFLAG_ATTR; }