]> git.cameronkatri.com Git - mandoc.git/blobdiff - read.c
Simplify handling of system errors: just exit(3).
[mandoc.git] / read.c
diff --git a/read.c b/read.c
index f4c1eb90076d62738d08cf7b9f549fcb68d058f2..123eb85d9b4b7e296354bfe16d549711913fccf3 100644 (file)
--- a/read.c
+++ b/read.c
@@ -1,7 +1,7 @@
-/*     $Id: read.c,v 1.103 2014/11/30 05:29:00 schwarze Exp $ */
+/*     $Id: read.c,v 1.107 2015/01/14 17:49:15 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2010, 2012 Joerg Sonnenberger <joerg@netbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -41,7 +41,6 @@
 #include "libmandoc.h"
 #include "mdoc.h"
 #include "man.h"
-#include "main.h"
 
 #define        REPARSE_LIMIT   1000
 
@@ -189,6 +188,7 @@ static      const char * const      mandocerrs[MANDOCERR_MAX] = {
        "ignore data in cell",
        "data block still open",
        "ignoring extra data cells",
+       "ignoring macro in table",
 
        /* related to document structure and macros */
        "input stack limit exceeded, infinite loop?",
@@ -220,16 +220,9 @@ static     const char * const      mandocerrs[MANDOCERR_MAX] = {
        ".so request failed",
 
        /* system errors */
-       "cannot dup file descriptor",
-       "cannot exec",
        "gunzip failed with code",
-       "cannot fork",
        NULL,
-       "cannot open pipe",
-       "cannot read file",
        "gunzip died from signal",
-       "cannot stat file",
-       "wait failed",
 };
 
 static const char * const      mandoclevels[MANDOCLEVEL_MAX] = {
@@ -298,7 +291,8 @@ choose_parser(struct mparse *curp)
        /* Fall back to man(7) as a last resort. */
 
        if (NULL == curp->pman)
-               curp->pman = man_alloc(curp->roff, curp,
+               curp->pman = man_alloc(
+                   curp->roff, curp, curp->defos,
                    MPARSE_QUICK & curp->options ? 1 : 0);
        assert(curp->pman);
        curp->man = curp->pman;
@@ -610,11 +604,8 @@ read_whole_file(struct mparse *curp, const char *file, int fd,
 #if HAVE_MMAP
        struct stat      st;
        if (-1 == fstat(fd, &st)) {
-               curp->file_status = MANDOCLEVEL_SYSERR;
-               if (curp->mmsg)
-                       (*curp->mmsg)(MANDOCERR_SYSSTAT, curp->file_status,
-                           file, 0, 0, strerror(errno));
-               return(0);
+               perror(file);
+               exit((int)MANDOCLEVEL_SYSERR);
        }
 
        /*
@@ -667,12 +658,8 @@ read_whole_file(struct mparse *curp, const char *file, int fd,
                        return(1);
                }
                if (ssz == -1) {
-                       curp->file_status = MANDOCLEVEL_SYSERR;
-                       if (curp->mmsg)
-                               (*curp->mmsg)(MANDOCERR_SYSREAD,
-                                   curp->file_status, file, 0, 0,
-                                   strerror(errno));
-                       break;
+                       perror(file);
+                       exit((int)MANDOCLEVEL_SYSERR);
                }
                off += (size_t)ssz;
        }
@@ -696,7 +683,8 @@ mparse_end(struct mparse *curp)
                        curp->mdoc = curp->pmdoc;
                else {
                        if (curp->pman == NULL)
-                               curp->pman = man_alloc(curp->roff, curp,
+                               curp->pman = man_alloc(
+                                   curp->roff, curp, curp->defos,
                                    curp->options & MPARSE_QUICK ? 1 : 0);
                        curp->man = curp->pman;
                }
@@ -756,12 +744,12 @@ mparse_parse_buffer(struct mparse *curp, struct buf blk, const char *file)
 }
 
 enum mandoclevel
-mparse_readmem(struct mparse *curp, const void *buf, size_t len,
+mparse_readmem(struct mparse *curp, void *buf, size_t len,
                const char *file)
 {
        struct buf blk;
 
-       blk.buf = UNCONST(buf);
+       blk.buf = buf;
        blk.sz = len;
 
        mparse_parse_buffer(curp, blk, file);
@@ -850,26 +838,23 @@ mparse_open(struct mparse *curp, int *fd, const char *file)
        /* Run gunzip(1). */
 
        if (pipe(pfd) == -1) {
-               err = MANDOCERR_SYSPIPE;
-               goto out;
+               perror("pipe");
+               exit((int)MANDOCLEVEL_SYSERR);
        }
 
        switch (curp->child = fork()) {
        case -1:
-               err = MANDOCERR_SYSFORK;
-               close(pfd[0]);
-               close(pfd[1]);
-               pfd[1] = -1;
-               break;
+               perror("fork");
+               exit((int)MANDOCLEVEL_SYSERR);
        case 0:
                close(pfd[0]);
                if (dup2(pfd[1], STDOUT_FILENO) == -1) {
-                       err = MANDOCERR_SYSDUP;
-                       break;
+                       perror("dup");
+                       exit((int)MANDOCLEVEL_SYSERR);
                }
                execlp("gunzip", "gunzip", "-c", file, NULL);
-               err = MANDOCERR_SYSEXEC;
-               break;
+               perror("exec");
+               exit((int)MANDOCLEVEL_SYSERR);
        default:
                close(pfd[1]);
                *fd = pfd[0];
@@ -898,10 +883,8 @@ mparse_wait(struct mparse *curp)
                return(MANDOCLEVEL_OK);
 
        if (waitpid(curp->child, &status, 0) == -1) {
-               mandoc_msg(MANDOCERR_SYSWAIT, curp, 0, 0,
-                   strerror(errno));
-               curp->file_status = MANDOCLEVEL_SYSERR;
-               return(curp->file_status);
+               perror("wait");
+               exit((int)MANDOCLEVEL_SYSERR);
        }
        if (WIFSIGNALED(status)) {
                mandoc_vmsg(MANDOCERR_SYSSIG, curp, 0, 0,
@@ -940,7 +923,8 @@ mparse_alloc(int options, enum mandoclevel wlevel, mandocmsg mmsg,
                    curp->roff, curp, curp->defos,
                    curp->options & MPARSE_QUICK ? 1 : 0);
        if (curp->options & MPARSE_MAN)
-               curp->pman = man_alloc(curp->roff, curp,
+               curp->pman = man_alloc(
+                   curp->roff, curp, curp->defos,
                    curp->options & MPARSE_QUICK ? 1 : 0);
 
        return(curp);