]> git.cameronkatri.com Git - mandoc.git/blobdiff - read.c
Sync to OpenBSD:
[mandoc.git] / read.c
diff --git a/read.c b/read.c
index 7106c52d3ca3d75440944a796317acf784b8b4e3..0cb75d6bdea22bc89a32f148feb958b479a671b2 100644 (file)
--- a/read.c
+++ b/read.c
@@ -1,7 +1,8 @@
-/*     $Id: read.c,v 1.40 2014/01/02 16:29:55 schwarze Exp $ */
+/*     $Id: read.c,v 1.43 2014/01/06 21:34:31 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, 2012 Joerg Sonnenberger <joerg@netbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -60,10 +61,10 @@ struct      mparse {
        struct roff      *roff; /* roff parser (!NULL) */
        int               reparse_count; /* finite interp. stack */
        mandocmsg         mmsg; /* warning/error message handler */
-       void             *arg; /* argument to mmsg */
        const char       *file; 
        struct buf       *secondary;
        char             *defos; /* default operating system */
+       int               quick; /* abort the parse early */
 };
 
 static void      resize_buf(struct buf *, size_t);
@@ -258,13 +259,14 @@ pset(const char *buf, int pos, struct mparse *curp)
        case (MPARSE_MDOC):
                if (NULL == curp->pmdoc) 
                        curp->pmdoc = mdoc_alloc(curp->roff, curp,
-                                       curp->defos);
+                                       curp->defos, curp->quick);
                assert(curp->pmdoc);
                curp->mdoc = curp->pmdoc;
                return;
        case (MPARSE_MAN):
                if (NULL == curp->pman) 
-                       curp->pman = man_alloc(curp->roff, curp);
+                       curp->pman = man_alloc(curp->roff, curp,
+                                       curp->quick);
                assert(curp->pman);
                curp->man = curp->pman;
                return;
@@ -275,14 +277,14 @@ pset(const char *buf, int pos, struct mparse *curp)
        if (pos >= 3 && 0 == memcmp(buf, ".Dd", 3))  {
                if (NULL == curp->pmdoc) 
                        curp->pmdoc = mdoc_alloc(curp->roff, curp,
-                                       curp->defos);
+                                       curp->defos, curp->quick);
                assert(curp->pmdoc);
                curp->mdoc = curp->pmdoc;
                return;
        } 
 
        if (NULL == curp->pman) 
-               curp->pman = man_alloc(curp->roff, curp);
+               curp->pman = man_alloc(curp->roff, curp, curp->quick);
        assert(curp->pman);
        curp->man = curp->pman;
 }
@@ -560,7 +562,8 @@ rerun:
                if (0 == rc) {
                        assert(MANDOCLEVEL_FATAL <= curp->file_status);
                        break;
-               }
+               } else if (2 == rc)
+                       break;
 
                /* Temporary buffers typically are not full. */
 
@@ -763,7 +766,7 @@ out:
 
 struct mparse *
 mparse_alloc(enum mparset inttype, enum mandoclevel wlevel,
-               mandocmsg mmsg, void *arg, char *defos)
+               mandocmsg mmsg, char *defos, int quick)
 {
        struct mparse   *curp;
 
@@ -773,11 +776,11 @@ mparse_alloc(enum mparset inttype, enum mandoclevel wlevel,
 
        curp->wlevel = wlevel;
        curp->mmsg = mmsg;
-       curp->arg = arg;
        curp->inttype = inttype;
        curp->defos = defos;
+       curp->quick = quick;
 
-       curp->roff = roff_alloc(inttype, curp);
+       curp->roff = roff_alloc(inttype, curp, curp->quick);
        return(curp);
 }