summaryrefslogtreecommitdiffstats
path: root/usr.bin/mandoc/read.c
diff options
context:
space:
mode:
authorschwarze <schwarze@openbsd.org>2014-08-08 15:21:17 +0000
committerschwarze <schwarze@openbsd.org>2014-08-08 15:21:17 +0000
commitac1f49d01ceff2a47571d14f0fdc829b542b4eee (patch)
treebcbcf457975e0316767cd5698eee3445dadc4a5d /usr.bin/mandoc/read.c
parentuse nitems() instead of various local constructs (diff)
downloadwireguard-openbsd-ac1f49d01ceff2a47571d14f0fdc829b542b4eee.tar.xz
wireguard-openbsd-ac1f49d01ceff2a47571d14f0fdc829b542b4eee.zip
Remove two useless FATAL errors.
When a file contains neither text nor macros, treat it as an empty document. When the mdoc(7) document prologue is incomplete, use some default values.
Diffstat (limited to 'usr.bin/mandoc/read.c')
-rw-r--r--usr.bin/mandoc/read.c40
1 files changed, 22 insertions, 18 deletions
diff --git a/usr.bin/mandoc/read.c b/usr.bin/mandoc/read.c
index 2422c2d4f23..c7d67756a51 100644
--- a/usr.bin/mandoc/read.c
+++ b/usr.bin/mandoc/read.c
@@ -1,4 +1,4 @@
-/* $Id: read.c,v 1.49 2014/08/08 15:15:27 schwarze Exp $ */
+/* $Id: read.c,v 1.50 2014/08/08 15:21:17 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -196,14 +196,12 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"generic fatal error",
"input too large",
- "not a manual",
"column syntax is inconsistent",
"NOT IMPLEMENTED: .Bd -file",
"child violates parent syntax",
"argument count wrong, violates syntax",
"NOT IMPLEMENTED: .so with absolute path or \"..\"",
".so request failed",
- "no document prologue",
"static buffer exhausted",
/* system errors */
@@ -256,18 +254,9 @@ pset(const char *buf, int pos, struct mparse *curp)
}
if (MPARSE_MDOC & curp->options) {
- if (NULL == curp->pmdoc)
- curp->pmdoc = mdoc_alloc(
- curp->roff, curp, curp->defos,
- MPARSE_QUICK & curp->options ? 1 : 0);
- assert(curp->pmdoc);
curp->mdoc = curp->pmdoc;
return;
} else if (MPARSE_MAN & curp->options) {
- if (NULL == curp->pman)
- curp->pman = man_alloc(curp->roff, curp,
- MPARSE_QUICK & curp->options ? 1 : 0);
- assert(curp->pman);
curp->man = curp->pman;
return;
}
@@ -673,6 +662,19 @@ mparse_end(struct mparse *curp)
if (MANDOCLEVEL_FATAL <= curp->file_status)
return;
+ if (curp->mdoc == NULL &&
+ curp->man == NULL &&
+ curp->sodest == NULL) {
+ if (curp->options & MPARSE_MDOC)
+ curp->mdoc = curp->pmdoc;
+ else {
+ if (curp->pman == NULL)
+ curp->pman = man_alloc(curp->roff, curp,
+ curp->options & MPARSE_QUICK ? 1 : 0);
+ curp->man = curp->pman;
+ }
+ }
+
if (curp->mdoc && ! mdoc_endparse(curp->mdoc)) {
assert(MANDOCLEVEL_FATAL <= curp->file_status);
return;
@@ -683,12 +685,6 @@ mparse_end(struct mparse *curp)
return;
}
- if ( ! (curp->mdoc || curp->man || curp->sodest)) {
- mandoc_msg(MANDOCERR_NOTMANUAL, curp, 0, 0, NULL);
- curp->file_status = MANDOCLEVEL_FATAL;
- return;
- }
-
roff_endparse(curp->roff);
}
@@ -771,6 +767,14 @@ mparse_alloc(int options, enum mandoclevel wlevel,
curp->defos = defos;
curp->roff = roff_alloc(curp, options);
+ if (curp->options & MPARSE_MDOC)
+ curp->pmdoc = mdoc_alloc(
+ curp->roff, curp, curp->defos,
+ curp->options & MPARSE_QUICK ? 1 : 0);
+ if (curp->options & MPARSE_MAN)
+ curp->pman = man_alloc(curp->roff, curp,
+ curp->options & MPARSE_QUICK ? 1 : 0);
+
return(curp);
}