source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mandoc: Move the full responsibility for reporting open(2) errors from
@ 2018-12-20 21:31 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2018-12-20 21:31 UTC (permalink / raw)
  To: source

Log Message:
-----------
Move the full responsibility for reporting open(2) errors from
mparse_open() to the caller.  That is better because only the caller
knows its preferred reporting method and format and only the caller
has access to all the data that should be included - like the column
number in .so processing or the current manpath in makewhatis(8).
Moving the mandoc_msg() call out is possible because the caller can
call strerror(3) just as easily as mparse_open() can.

Move mandoc_msg_setinfilename() closer to the parsing of the file
contents, to avoid problems *with* the file (like non-existence,
lack of permissions, etc.) getting misreported as problems *in*
the file.

Fix the column number reported for .so failure:
let it point to the beginning of the filename.

Taken together, this prevents makewhatis(8) from spewing confusing
messages about .so failures to stderr, a bug reported by
Raf Czlonka <rczlonka at gmail dot com> on ports@.

It also prevents mandoc(1) from issuing *two* messages for every
single .so failure.

Modified Files:
--------------
    mandoc:
        main.c
        read.c

Revision Data
-------------
Index: main.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/main.c,v
retrieving revision 1.313
retrieving revision 1.314
diff -Lmain.c -Lmain.c -u -p -r1.313 -r1.314
--- main.c
+++ main.c
@@ -510,7 +510,6 @@ main(int argc, char *argv[])
 		} else
 			thisarg = *argv;
 
-		mandoc_msg_setinfilename(thisarg);
 		fd = mparse_open(curp.mp, thisarg);
 		if (fd != -1) {
 			if (use_pager) {
@@ -523,11 +522,13 @@ main(int argc, char *argv[])
 					    conf.output.tag : *argv;
 			}
 
+			mandoc_msg_setinfilename(thisarg);
 			if (resp == NULL || resp->form == FORM_SRC)
 				parse(&curp, fd, thisarg);
 			else
 				passthrough(resp->file, fd,
 				    conf.output.synopsisonly);
+			mandoc_msg_setinfilename(NULL);
 
 			if (ferror(stdout)) {
 				if (tag_files != NULL) {
@@ -545,8 +546,9 @@ main(int argc, char *argv[])
 					outdata_alloc(&curp);
 				terminal_sepline(curp.outdata);
 			}
-		}
-		mandoc_msg_setinfilename(NULL);
+		} else
+			mandoc_msg(MANDOCERR_FILE, 0, 0,
+			    "%s", strerror(errno));
 
 		if (curp.wstop && mandoc_msg_getrc() != MANDOCLEVEL_OK)
 			break;
Index: read.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/read.c,v
retrieving revision 1.207
retrieving revision 1.208
diff -Lread.c -Lread.c -u -p -r1.207 -r1.208
--- read.c
+++ read.c
@@ -372,8 +372,9 @@ rerun:
 				mparse_readfd(curp, fd, ln.buf + of);
 				close(fd);
 			} else {
-				mandoc_msg(MANDOCERR_SO_FAIL, curp->line,
-				    pos, ".so %s", ln.buf + of);
+				mandoc_msg(MANDOCERR_SO_FAIL,
+				    curp->line, of, ".so %s: %s",
+				    ln.buf + of, strerror(errno));
 				ln.sz = mandoc_asprintf(&cp,
 				    ".sp\nSee the file %s.\n.sp",
 				    ln.buf + of);
@@ -633,7 +634,6 @@ mparse_open(struct mparse *curp, const c
 
 	/* Neither worked, give up. */
 
-	mandoc_msg(MANDOCERR_FILE, 0, 0, "%s", strerror(errno));
 	return -1;
 }
 
--
 To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv

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

only message in thread, other threads:[~2018-12-20 21:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-20 21:31 mandoc: Move the full responsibility for reporting open(2) errors from 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).