]> git.cameronkatri.com Git - mandoc.git/blobdiff - read.c
On a new RS nesting level, the saved width starts from the default
[mandoc.git] / read.c
diff --git a/read.c b/read.c
index a52bfb1c443a2ee13a4c0791af852787c453c006..8adad316e96db488059fc1e0575d98ec19346b53 100644 (file)
--- a/read.c
+++ b/read.c
@@ -1,4 +1,4 @@
-/*     $Id: read.c,v 1.124 2015/02/06 07:13:14 schwarze Exp $ */
+/*     $Id: read.c,v 1.133 2015/04/02 21:36:50 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -8,9 +8,9 @@
  * purpose with or without fee is hereby granted, provided that the above
  * copyright notice and this permission notice appear in all copies.
  *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
@@ -29,6 +29,7 @@
 #include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <signal.h>
 #include <stdarg.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 
-#include "mandoc.h"
 #include "mandoc_aux.h"
-#include "libmandoc.h"
+#include "mandoc.h"
+#include "roff.h"
 #include "mdoc.h"
 #include "man.h"
+#include "libmandoc.h"
 
 #define        REPARSE_LIMIT   1000
 
@@ -109,7 +111,10 @@ static     const char * const      mandocerrs[MANDOCERR_MAX] = {
        "no document body",
        "content before first section header",
        "first section is not \"NAME\"",
-       "bad NAME section contents",
+       "NAME section without name",
+       "NAME section without description",
+       "description not at the end of NAME",
+       "bad NAME section content",
        "missing description line, using \"\"",
        "sections out of conventional order",
        "duplicate section title",
@@ -150,6 +155,8 @@ static      const char * const      mandocerrs[MANDOCERR_MAX] = {
        "nothing follows prefix",
        "empty reference block",
        "missing -std argument, adding it",
+       "missing option string, using \"\"",
+       "missing resource identifier, using \"\"",
        "missing eqn box, using \"\"",
 
        /* related to bad macro arguments */
@@ -159,12 +166,14 @@ static    const char * const      mandocerrs[MANDOCERR_MAX] = {
        "skipping duplicate display type",
        "skipping duplicate list type",
        "skipping -width argument",
+       "wrong number of cells",
        "unknown AT&T UNIX version",
        "comma in function argument",
        "parenthesis in function name",
        "invalid content in Rs block",
        "invalid Boolean argument",
        "unknown font, skipping request",
+       "odd number of characters in request",
 
        /* related to plain text */
        "blank line in fill mode, using .sp",
@@ -209,7 +218,6 @@ static      const char * const      mandocerrs[MANDOCERR_MAX] = {
 
        /* related to request and macro arguments */
        "escaped character not allowed in a name",
-       "argument count wrong",
        "NOT IMPLEMENTED: Bd -file",
        "missing list type, using -item",
        "missing manual name, using \"\"",
@@ -396,7 +404,8 @@ mparse_buf_r(struct mparse *curp, struct buf blk, size_t i, int start)
                                    MANDOCERR_CHAR_UNSUPP,
                                    curp, curp->line, pos, "0x%x", c);
                                i++;
-                               ln.buf[pos++] = '?';
+                               if (c != '\r')
+                                       ln.buf[pos++] = '?';
                                continue;
                        }
 
@@ -629,7 +638,7 @@ read_whole_file(struct mparse *curp, const char *file, int fd,
         */
 
        if (S_ISREG(st.st_mode)) {
-               if (st.st_size >= (1U << 31)) {
+               if (st.st_size > 0x7fffffff) {
                        mandoc_msg(MANDOCERR_TOOLARGE, curp, 0, 0, NULL);
                        return(0);
                }
@@ -839,6 +848,7 @@ mparse_open(struct mparse *curp, int *fd, const char *file)
                        perror("dup");
                        exit((int)MANDOCLEVEL_SYSERR);
                }
+               signal(SIGPIPE, SIG_DFL);
                execlp("gunzip", "gunzip", "-c", file, NULL);
                perror("exec");
                exit((int)MANDOCLEVEL_SYSERR);
@@ -861,6 +871,7 @@ mparse_wait(struct mparse *curp)
                perror("wait");
                exit((int)MANDOCLEVEL_SYSERR);
        }
+       curp->child = 0;
        if (WIFSIGNALED(status)) {
                mandoc_vmsg(MANDOCERR_FILE, curp, 0, 0,
                    "gunzip died from signal %d", WTERMSIG(status));