Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/bsd/mdocml/dist Merge mandoc.h r1.99 and read.c 1.2...



details:   https://anonhg.NetBSD.org/src/rev/18c179671087
branches:  trunk
changeset: 777371:18c179671087
user:      joerg <joerg%NetBSD.org@localhost>
date:      Thu Feb 16 20:58:23 2012 +0000

description:
Merge mandoc.h r1.99 and read.c 1.28 from upstream:
Add mparse_readmem, which allows application to run the parser directly
from memory, e.g. after de-compressing a document.

diffstat:

 external/bsd/mdocml/dist/mandoc.h |   4 +-
 external/bsd/mdocml/dist/read.c   |  98 +++++++++++++++++++++-----------------
 2 files changed, 58 insertions(+), 44 deletions(-)

diffs (172 lines):

diff -r 0ecfbe25d6e2 -r 18c179671087 external/bsd/mdocml/dist/mandoc.h
--- a/external/bsd/mdocml/dist/mandoc.h Thu Feb 16 20:45:21 2012 +0000
+++ b/external/bsd/mdocml/dist/mandoc.h Thu Feb 16 20:58:23 2012 +0000
@@ -1,4 +1,4 @@
-/*     $Vendor-Id: mandoc.h,v 1.98 2011/11/08 00:15:23 kristaps Exp $ */
+/*     $Vendor-Id: mandoc.h,v 1.99 2012/02/16 20:51:31 joerg Exp $ */
 /*
  * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps%bsd.lv@localhost>
  *
@@ -418,6 +418,8 @@
 void             mparse_free(struct mparse *);
 void             mparse_keep(struct mparse *);
 enum mandoclevel  mparse_readfd(struct mparse *, int, const char *);
+enum mandoclevel  mparse_readmem(struct mparse *, const void *, size_t,
+                       const char *);
 void             mparse_reset(struct mparse *);
 void             mparse_result(struct mparse *, 
                        struct mdoc **, struct man **);
diff -r 0ecfbe25d6e2 -r 18c179671087 external/bsd/mdocml/dist/read.c
--- a/external/bsd/mdocml/dist/read.c   Thu Feb 16 20:45:21 2012 +0000
+++ b/external/bsd/mdocml/dist/read.c   Thu Feb 16 20:58:23 2012 +0000
@@ -1,4 +1,4 @@
-/*     $Vendor-Id: read.c,v 1.27 2012/02/05 16:46:15 joerg Exp $ */
+/*     $Vendor-Id: read.c,v 1.28 2012/02/16 20:51:31 joerg Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps%bsd.lv@localhost>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze%openbsd.org@localhost>
@@ -28,6 +28,7 @@
 #include <ctype.h>
 #include <fcntl.h>
 #include <stdarg.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -37,6 +38,7 @@
 #include "libmandoc.h"
 #include "mdoc.h"
 #include "man.h"
+#include "main.h"
 
 #ifndef MAP_FILE
 #define        MAP_FILE        0
@@ -70,7 +72,6 @@
 static void      mparse_buf_r(struct mparse *, struct buf, int);
 static void      mparse_readfd_r(struct mparse *, int, const char *, int);
 static void      pset(const char *, int, struct mparse *);
-static void      pdesc(struct mparse *, const char *, int);
 static int       read_whole_file(const char *, int, struct buf *, int *);
 static void      mparse_end(struct mparse *);
 
@@ -547,38 +548,6 @@
        free(ln.buf);
 }
 
-static void
-pdesc(struct mparse *curp, const char *file, int fd)
-{
-       struct buf       blk;
-       int              with_mmap;
-
-       /*
-        * Run for each opened file; may be called more than once for
-        * each full parse sequence if the opened file is nested (i.e.,
-        * from `so').  Simply sucks in the whole file and moves into
-        * the parse phase for the file.
-        */
-
-       if ( ! read_whole_file(file, fd, &blk, &with_mmap)) {
-               curp->file_status = MANDOCLEVEL_SYSERR;
-               return;
-       }
-
-       /* Line number is per-file. */
-
-       curp->line = 1;
-
-       mparse_buf_r(curp, blk, 1);
-
-#ifdef HAVE_MMAP
-       if (with_mmap)
-               munmap(blk.buf, blk.sz);
-       else
-#endif
-               free(blk.buf);
-}
-
 static int
 read_whole_file(const char *file, int fd, struct buf *fb, int *with_mmap)
 {
@@ -674,9 +643,42 @@
 }
 
 static void
+mparse_parse_buffer(struct mparse *curp, struct buf blk, const char *file,
+               int re)
+{
+       const char      *svfile;
+
+       /* Line number is per-file. */
+       svfile = curp->file;
+       curp->file = file;
+       curp->line = 1;
+
+       mparse_buf_r(curp, blk, 1);
+
+       if (0 == re && MANDOCLEVEL_FATAL > curp->file_status)
+               mparse_end(curp);
+
+       curp->file = svfile;
+}
+
+enum mandoclevel
+mparse_readmem(struct mparse *curp, const void *buf, size_t len,
+               const char *file)
+{
+       struct buf blk;
+
+       blk.buf = UNCONST(buf);
+       blk.sz = len;
+
+       mparse_parse_buffer(curp, blk, file, 0);
+       return(curp->file_status);
+}
+
+static void
 mparse_readfd_r(struct mparse *curp, int fd, const char *file, int re)
 {
-       const char      *svfile;
+       struct buf       blk;
+       int              with_mmap;
 
        if (-1 == fd)
                if (-1 == (fd = open(file, O_RDONLY, 0))) {
@@ -684,19 +686,29 @@
                        curp->file_status = MANDOCLEVEL_SYSERR;
                        return;
                }
-
-       svfile = curp->file;
-       curp->file = file;
+       /*
+        * Run for each opened file; may be called more than once for
+        * each full parse sequence if the opened file is nested (i.e.,
+        * from `so').  Simply sucks in the whole file and moves into
+        * the parse phase for the file.
+        */
 
-       pdesc(curp, file, fd);
+       if ( ! read_whole_file(file, fd, &blk, &with_mmap)) {
+               curp->file_status = MANDOCLEVEL_SYSERR;
+               return;
+       }
+
+       mparse_parse_buffer(curp, blk, file, re);
 
-       if (0 == re && MANDOCLEVEL_FATAL > curp->file_status)
-               mparse_end(curp);
+#ifdef HAVE_MMAP
+       if (with_mmap)
+               munmap(blk.buf, blk.sz);
+       else
+#endif
+               free(blk.buf);
 
        if (STDIN_FILENO != fd && -1 == close(fd))
                perror(file);
-
-       curp->file = svfile;
 }
 
 enum mandoclevel



Home | Main Index | Thread Index | Old Index