Module Name: src
Committed By: joerg
Date: Thu Feb 16 20:58:23 UTC 2012
Modified Files:
src/external/bsd/mdocml/dist: mandoc.h read.c
Log Message:
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.
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.9 -r1.2 src/external/bsd/mdocml/dist/mandoc.h
cvs rdiff -u -r1.5 -r1.6 src/external/bsd/mdocml/dist/read.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/mdocml/dist/mandoc.h
diff -u src/external/bsd/mdocml/dist/mandoc.h:1.1.1.9 src/external/bsd/mdocml/dist/mandoc.h:1.2
--- src/external/bsd/mdocml/dist/mandoc.h:1.1.1.9 Mon Jan 30 16:44:19 2012
+++ src/external/bsd/mdocml/dist/mandoc.h Thu Feb 16 20:58:23 2012
@@ -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 <[email protected]>
*
@@ -418,6 +418,8 @@ struct mparse *mparse_alloc(enum mparse
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 **);
Index: src/external/bsd/mdocml/dist/read.c
diff -u src/external/bsd/mdocml/dist/read.c:1.5 src/external/bsd/mdocml/dist/read.c:1.6
--- src/external/bsd/mdocml/dist/read.c:1.5 Mon Feb 6 10:42:44 2012
+++ src/external/bsd/mdocml/dist/read.c Thu Feb 16 20:58:23 2012
@@ -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 <[email protected]>
* Copyright (c) 2010, 2011 Ingo Schwarze <[email protected]>
@@ -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 resize_buf(struct buf *, s
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 @@ rerun:
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,29 +643,72 @@ mparse_end(struct mparse *curp)
}
static void
-mparse_readfd_r(struct mparse *curp, int fd, const char *file, int re)
+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)
+{
+ struct buf blk;
+ int with_mmap;
+
if (-1 == fd)
if (-1 == (fd = open(file, O_RDONLY, 0))) {
perror(file);
curp->file_status = MANDOCLEVEL_SYSERR;
return;
}
+ /*
+ * 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.
+ */
- svfile = curp->file;
- curp->file = file;
+ if ( ! read_whole_file(file, fd, &blk, &with_mmap)) {
+ curp->file_status = MANDOCLEVEL_SYSERR;
+ return;
+ }
- pdesc(curp, file, fd);
+ 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