Simplify handling of system errors: just exit(3).
authorschwarze <schwarze@openbsd.org>
Wed, 14 Jan 2015 17:45:25 +0000 (17:45 +0000)
committerschwarze <schwarze@openbsd.org>
Wed, 14 Jan 2015 17:45:25 +0000 (17:45 +0000)
We already do the same for malloc(3) failure.
The is no virtue in trying to survive failure of fork(2) and the like.

usr.bin/mandoc/mandoc.h
usr.bin/mandoc/read.c

index bcf99b2..5b79237 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mandoc.h,v 1.119 2014/12/16 23:44:16 schwarze Exp $ */
+/*     $OpenBSD: mandoc.h,v 1.120 2015/01/14 17:45:25 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -177,16 +177,9 @@ enum       mandocerr {
 
        /* ===== system errors ===== */
 
-       MANDOCERR_SYSDUP, /* cannot dup file descriptor */
-       MANDOCERR_SYSEXEC, /* cannot exec */
        MANDOCERR_SYSEXIT, /* gunzip failed with code */
-       MANDOCERR_SYSFORK, /* cannot fork */
        MANDOCERR_SYSOPEN, /* cannot open file */
-       MANDOCERR_SYSPIPE, /* cannot open pipe */
-       MANDOCERR_SYSREAD, /* cannot read file */
        MANDOCERR_SYSSIG, /* gunzip died from signal */
-       MANDOCERR_SYSSTAT, /* cannot stat file */
-       MANDOCERR_SYSWAIT, /* wait failed */
 
        MANDOCERR_MAX
 };
index ba26fe8..ebb4703 100644 (file)
@@ -1,7 +1,7 @@
-/*     $OpenBSD: read.c,v 1.81 2014/12/28 14:39:08 schwarze Exp $ */
+/*     $OpenBSD: read.c,v 1.82 2015/01/14 17:45:25 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
@@ -215,16 +215,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] = {
@@ -605,11 +598,8 @@ read_whole_file(struct mparse *curp, const char *file, int fd,
        ssize_t          ssz;
 
        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);
        }
 
        /*
@@ -661,12 +651,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;
        }
@@ -830,26 +816,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];
@@ -878,10 +861,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,