]> git.cameronkatri.com Git - mandoc.git/blobdiff - main.c
Drop trailing whitespace, adjust a few indentations,
[mandoc.git] / main.c
diff --git a/main.c b/main.c
index 81f2d0c9fbed81f530fa2ecb09793e6429ff29f8..620cd6c13a2439bdc7d9e9127111fefd4db49ba6 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/*     $Id: main.c,v 1.190 2014/09/03 05:22:45 schwarze Exp $ */
+/*     $Id: main.c,v 1.192 2014/09/03 23:21:47 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011, 2012, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -87,7 +87,7 @@ static        void              mmsg(enum mandocerr, enum mandoclevel,
                                const char *, int, int, const char *);
 static void              parse(struct curparse *, int,
                                const char *, enum mandoclevel *);
-static enum mandoclevel  passthrough(const char *);
+static enum mandoclevel  passthrough(const char *, int);
 static void              spawn_pager(void);
 static int               toptions(struct curparse *, char *);
 static void              usage(enum argmode) __attribute__((noreturn));
@@ -114,6 +114,8 @@ main(int argc, char *argv[])
 #endif
        enum mandoclevel rc;
        enum outmode     outmode;
+       pid_t            child_pid;
+       int              fd;
        int              show_usage;
        int              use_pager;
        int              options;
@@ -370,16 +372,30 @@ main(int argc, char *argv[])
        while (argc) {
 #if HAVE_SQLITE3
                if (resp != NULL) {
-                       if (resp->form) {
+                       rc = mparse_open(curp.mp, &fd, resp->file,
+                           &child_pid);
+                       if (fd == -1)
+                               /* nothing */;
+                       else if (resp->form & FORM_SRC) {
                                /* For .so only; ignore failure. */
                                chdir(paths.paths[resp->ipath]);
-                               parse(&curp, -1, resp->file, &rc);
+                               parse(&curp, fd, resp->file, &rc);
                        } else
-                               rc = passthrough(resp->file);
+                               rc = passthrough(resp->file, fd);
                        resp++;
                } else
 #endif
-                       parse(&curp, -1, *argv++, &rc);
+               {
+                       rc = mparse_open(curp.mp, &fd, *argv++,
+                           &child_pid);
+                       if (fd != -1)
+                               parse(&curp, fd, argv[-1], &rc);
+               }
+
+               if (child_pid &&
+                   mparse_wait(curp.mp, child_pid) != MANDOCLEVEL_OK)
+                       rc = MANDOCLEVEL_SYSERR;
+
                if (MANDOCLEVEL_OK != rc && curp.wstop)
                        break;
                argc--;
@@ -555,18 +571,11 @@ parse(struct curparse *curp, int fd, const char *file,
 }
 
 static enum mandoclevel
-passthrough(const char *file)
+passthrough(const char *file, int fd)
 {
        char             buf[BUFSIZ];
        const char      *syscall;
        ssize_t          nr, nw, off;
-       int              fd;
-
-       fd = open(file, O_RDONLY);
-       if (fd == -1) {
-               syscall = "open";
-               goto fail;
-       }
 
        while ((nr = read(fd, buf, BUFSIZ)) != -1 && nr != 0)
                for (off = 0; off < nr; off += nw)