summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-01-09 01:37:03 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-01-09 01:37:03 +0000
commit6769f9615389aedbeaaf3a3c3153aec49c88954c (patch)
tree2c7cd176802f9d756266208308bdd826d26a0e86
parent84899683ac7364eaba7f2fbd1ff194612d1a7db0 (diff)
downloadmandoc-6769f9615389aedbeaaf3a3c3153aec49c88954c.tar.gz
Warnings and errors that occur during mdoc_validate()
or during man_validate() have to affect the mandoc(1) EXIT STATUS. Many thanks to <Yuri dot Pankov at gmail dot com> (illumos developer) for reporting this regression.
-rw-r--r--main.c3
-rw-r--r--mandoc.329
-rw-r--r--mandoc.h1
-rw-r--r--read.c7
4 files changed, 37 insertions, 3 deletions
diff --git a/main.c b/main.c
index e3c1f34f..c3e6f766 100644
--- a/main.c
+++ b/main.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010-2012, 2014-2016 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
@@ -781,6 +781,7 @@ parse(struct curparse *curp, int fd, const char *file)
break;
}
}
+ mparse_updaterc(curp->mp, &rc);
}
static void
diff --git a/mandoc.3 b/mandoc.3
index d1471c97..9485c554 100644
--- a/mandoc.3
+++ b/mandoc.3
@@ -1,7 +1,7 @@
.\" $Id$
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2010-2016 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -34,7 +34,8 @@
.Nm mparse_reset ,
.Nm mparse_result ,
.Nm mparse_strerror ,
-.Nm mparse_strlevel
+.Nm mparse_strlevel ,
+.Nm mparse_updaterc
.Nd mandoc macro compiler library
.Sh SYNOPSIS
.In sys/types.h
@@ -100,6 +101,11 @@
.Fo mparse_strlevel
.Fa "enum mandoclevel"
.Fc
+.Ft void
+.Fo mparse_updaterc
+.Fa "struct mparse *parse"
+.Fa "enum mandoclevel *rc"
+.Fc
.In roff.h
.Ft void
.Fo deroff
@@ -181,6 +187,9 @@ or
.Fn man_validate ,
respectively;
.It
+if information about the validity of the input is needed, fetch it with
+.Fn mparse_updaterc ;
+.It
iterate over parse nodes with starting from the
.Fa first
member of the returned
@@ -416,6 +425,22 @@ Declared in
.In mandoc.h ,
implemented in
.Pa read.c .
+.It Fn mparse_updaterc
+If the highest warning or error level that occurred during the current
+.Fa parse
+is higher than
+.Pf * Fa rc ,
+update
+.Pf * Fa rc
+accordingly.
+This is useful after calling
+.Fn mdoc_validate
+or
+.Fn man_validate .
+Declared in
+.In mandoc.h ,
+implemented in
+.Pa read.c .
.El
.Ss Variables
.Bl -ohang
diff --git a/mandoc.h b/mandoc.h
index 623d3b61..5b75e882 100644
--- a/mandoc.h
+++ b/mandoc.h
@@ -435,3 +435,4 @@ void mparse_result(struct mparse *,
const char *mparse_getkeep(const struct mparse *);
const char *mparse_strerror(enum mandocerr);
const char *mparse_strlevel(enum mandoclevel);
+void mparse_updaterc(struct mparse *, enum mandoclevel *);
diff --git a/read.c b/read.c
index 566fac78..936586a7 100644
--- a/read.c
+++ b/read.c
@@ -867,6 +867,13 @@ mparse_result(struct mparse *curp, struct roff_man **man,
}
void
+mparse_updaterc(struct mparse *curp, enum mandoclevel *rc)
+{
+ if (curp->file_status > *rc)
+ *rc = curp->file_status;
+}
+
+void
mandoc_vmsg(enum mandocerr t, struct mparse *m,
int ln, int pos, const char *fmt, ...)
{