source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: To get rid of SYSERR entries in enum mandocerr, downgrade
@ 2015-01-14 22:03 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2015-01-14 22:03 UTC (permalink / raw)
  To: source

Log Message:
-----------
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.

Modified Files:
--------------
    mdocml:
        mandoc.1
        mandoc.h
        read.c

Revision Data
-------------
Index: mandoc.h
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mandoc.h,v
retrieving revision 1.178
retrieving revision 1.179
diff -Lmandoc.h -Lmandoc.h -u -p -r1.178 -r1.179
--- mandoc.h
+++ mandoc.h
@@ -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 */
@@ -174,12 +175,6 @@ enum	mandocerr {
 	MANDOCERR_TOOLARGE, /* input too large */
 	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
 };
Index: mandoc.1
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mandoc.1,v
retrieving revision 1.130
retrieving revision 1.131
diff -Lmandoc.1 -Lmandoc.1 -u -p -r1.130 -r1.131
--- mandoc.1
+++ mandoc.1
@@ -1,7 +1,7 @@
 .\"	$Id$
 .\"
 .\" 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
@@ -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 
 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
Index: read.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/read.c,v
retrieving revision 1.107
retrieving revision 1.108
diff -Lread.c -Lread.c -u -p -r1.107 -r1.108
--- read.c
+++ read.c
@@ -191,6 +191,7 @@ static	const char * const	mandocerrs[MAN
 	"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[MAN
 	"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 f
 	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
 	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
 	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
 		*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 mpa
 	while (er < mandoclimits[level])
 		level--;
 
-	if (level < m->wlevel)
+	if (level < m->wlevel && er != MANDOCERR_FILE)
 		return;
 
 	if (m->mmsg)
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2015-01-14 22:03 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-14 22:03 mdocml: To get rid of SYSERR entries in enum mandocerr, downgrade schwarze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).