aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2015-01-14 22:02:49 +0000
committerIngo Schwarze <schwarze@openbsd.org>2015-01-14 22:02:49 +0000
commite54b1e9f0f881374060eef0e4c54bdd192cf7f34 (patch)
tree3b0e9093efa2cafde5e03c08a0a9e95f3603e03f
parent669764169e6c178341b11ebab8f1885b74e310db (diff)
downloadmandoc-e54b1e9f0f881374060eef0e4c54bdd192cf7f34.tar.gz
mandoc-e54b1e9f0f881374060eef0e4c54bdd192cf7f34.tar.zst
mandoc-e54b1e9f0f881374060eef0e4c54bdd192cf7f34.zip
To get rid of SYSERR entries in enum mandocerr, downgrade problems with
missing and unreadable files from SYSERR to ERROR. Needed for upcoming work. As a bonus, this minimally simplifies code and documentation.
-rw-r--r--mandoc.122
-rw-r--r--mandoc.h9
-rw-r--r--read.c47
3 files changed, 30 insertions, 48 deletions
diff --git a/mandoc.1 b/mandoc.1
index 6ca3ec36..c1459c18 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,7 +1,7 @@
-.\" $Id: mandoc.1,v 1.130 2014/12/28 14:42:27 schwarze Exp $
+.\" $Id: mandoc.1,v 1.131 2015/01/14 22:02:49 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2012, 2014 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2012, 2014, 2015 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
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: December 28 2014 $
+.Dd $Mdocdate: January 14 2015 $
.Dt MANDOC 1
.Os
.Sh NAME
@@ -543,8 +543,8 @@ A fatal parsing error occurred.
Invalid command line arguments were specified.
No input files have been read.
.It 6
-An operating system error occurred, for example memory exhaustion or an
-error accessing input files.
+An operating system error occurred, for example exhaustion
+of memory, file descriptors, or process table entries.
Such errors cause
.Nm
to exit at once, possibly in the middle of parsing or formatting a file.
@@ -603,9 +603,6 @@ fields.
.Pp
Message levels have the following meanings:
.Bl -tag -width "warning"
-.It Cm syserr
-Opening or reading an input file failed, so the parser cannot
-even be started and no output is produced from that input file.
.It Cm fatal
The parser is unable to parse a given input file at all.
No formatted output is produced from that input file.
@@ -619,6 +616,12 @@ the parser is able to continue, and the error does not prevent
generation of formatted output, but typically, preparing that
output involves information loss, broken document structure
or unintended formatting.
+.Pp
+Non-existent or unreadable input files are also reported on the
+.Cm error
+level.
+In that case, the parser cannot even be started and no output
+is produced from those input files.
.It Cm warning
An input file uses obsolete, discouraged or non-portable syntax.
All the same, the meaning of the input is unambiguous and a correct
@@ -632,7 +635,8 @@ Messages of the
.Cm warning
and
.Cm error
-levels are hidden unless their level, or a lower level, is requested using a
+levels except those about non-existent or unreadable input files
+are hidden unless their level, or a lower level, is requested using a
.Fl W
option or
.Fl T Ns Cm lint
diff --git a/mandoc.h b/mandoc.h
index d0752055..74a4fb8a 100644
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/* $Id: mandoc.h,v 1.178 2015/01/14 17:49:15 schwarze Exp $ */
+/* $Id: mandoc.h,v 1.179 2015/01/14 22:02:50 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -147,6 +147,7 @@ enum mandocerr {
MANDOCERR_TBLMACRO, /* ignoring macro in table: macro */
/* related to document structure and macros */
+ MANDOCERR_FILE, /* cannot open file */
MANDOCERR_ROFFLOOP, /* input stack limit exceeded, infinite loop? */
MANDOCERR_BADCHAR, /* skipping bad character: number */
MANDOCERR_MACRO, /* skipping unknown macro: macro */
@@ -175,12 +176,6 @@ enum mandocerr {
MANDOCERR_SO_PATH, /* NOT IMPLEMENTED: .so with absolute path or ".." */
MANDOCERR_SO_FAIL, /* .so request failed */
- /* ===== system errors ===== */
-
- MANDOCERR_SYSEXIT, /* gunzip failed with code */
- MANDOCERR_SYSOPEN, /* cannot open file */
- MANDOCERR_SYSSIG, /* gunzip died from signal */
-
MANDOCERR_MAX
};
diff --git a/read.c b/read.c
index 123eb85d..8bf74c48 100644
--- a/read.c
+++ b/read.c
@@ -1,4 +1,4 @@
-/* $Id: read.c,v 1.107 2015/01/14 17:49:15 schwarze Exp $ */
+/* $Id: read.c,v 1.108 2015/01/14 22:02:50 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -191,6 +191,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"ignoring macro in table",
/* related to document structure and macros */
+ NULL,
"input stack limit exceeded, infinite loop?",
"skipping bad character",
"skipping unknown macro",
@@ -218,11 +219,6 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"input too large",
"NOT IMPLEMENTED: .so with absolute path or \"..\"",
".so request failed",
-
- /* system errors */
- "gunzip failed with code",
- NULL,
- "gunzip died from signal",
};
static const char * const mandoclevels[MANDOCLEVEL_MAX] = {
@@ -773,7 +769,7 @@ mparse_readfd(struct mparse *curp, int fd, const char *file)
save_child = curp->child;
if (fd != -1)
curp->child = 0;
- else if (mparse_open(curp, &fd, file) >= MANDOCLEVEL_SYSERR)
+ else if (mparse_open(curp, &fd, file) != MANDOCLEVEL_OK)
goto out;
if (read_whole_file(curp, file, fd, &blk, &with_mmap)) {
@@ -805,9 +801,7 @@ mparse_open(struct mparse *curp, int *fd, const char *file)
int pfd[2];
int save_errno;
char *cp;
- enum mandocerr err;
- pfd[1] = -1;
curp->file = file;
/* Unless zipped, try to just open the file. */
@@ -831,8 +825,11 @@ mparse_open(struct mparse *curp, int *fd, const char *file)
if (access(file, R_OK) == -1) {
if (cp != NULL)
errno = save_errno;
- err = MANDOCERR_SYSOPEN;
- goto out;
+ free(cp);
+ *fd = -1;
+ curp->child = 0;
+ mandoc_msg(MANDOCERR_FILE, curp, 0, 0, strerror(errno));
+ return(MANDOCLEVEL_ERROR);
}
/* Run gunzip(1). */
@@ -860,18 +857,6 @@ mparse_open(struct mparse *curp, int *fd, const char *file)
*fd = pfd[0];
return(MANDOCLEVEL_OK);
}
-
-out:
- free(cp);
- *fd = -1;
- curp->child = 0;
- curp->file_status = MANDOCLEVEL_SYSERR;
- if (curp->mmsg)
- (*curp->mmsg)(err, curp->file_status, curp->file,
- 0, 0, strerror(errno));
- if (pfd[1] != -1)
- exit(1);
- return(curp->file_status);
}
enum mandoclevel
@@ -887,16 +872,14 @@ mparse_wait(struct mparse *curp)
exit((int)MANDOCLEVEL_SYSERR);
}
if (WIFSIGNALED(status)) {
- mandoc_vmsg(MANDOCERR_SYSSIG, curp, 0, 0,
- "%d", WTERMSIG(status));
- curp->file_status = MANDOCLEVEL_SYSERR;
- return(curp->file_status);
+ mandoc_vmsg(MANDOCERR_FILE, curp, 0, 0,
+ "gunzip died from signal %d", WTERMSIG(status));
+ return(MANDOCLEVEL_ERROR);
}
if (WEXITSTATUS(status)) {
- mandoc_vmsg(MANDOCERR_SYSEXIT, curp, 0, 0,
- "%d", WEXITSTATUS(status));
- curp->file_status = MANDOCLEVEL_SYSERR;
- return(curp->file_status);
+ mandoc_vmsg(MANDOCERR_FILE, curp, 0, 0,
+ "gunzip failed with code %d", WEXITSTATUS(status));
+ return(MANDOCLEVEL_ERROR);
}
return(MANDOCLEVEL_OK);
}
@@ -1009,7 +992,7 @@ mandoc_msg(enum mandocerr er, struct mparse *m,
while (er < mandoclimits[level])
level--;
- if (level < m->wlevel)
+ if (level < m->wlevel && er != MANDOCERR_FILE)
return;
if (m->mmsg)