summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/mandoc/libmandoc.h4
-rw-r--r--usr.bin/mandoc/libmdoc.h3
-rw-r--r--usr.bin/mandoc/main.c24
-rw-r--r--usr.bin/mandoc/mandoc.116
-rw-r--r--usr.bin/mandoc/mandoc.h6
-rw-r--r--usr.bin/mandoc/mandocdb.c4
-rw-r--r--usr.bin/mandoc/mdoc.c5
-rw-r--r--usr.bin/mandoc/mdoc_validate.c25
-rw-r--r--usr.bin/mandoc/read.c13
9 files changed, 68 insertions, 32 deletions
diff --git a/usr.bin/mandoc/libmandoc.h b/usr.bin/mandoc/libmandoc.h
index 7adf160c34b..a23533f0239 100644
--- a/usr.bin/mandoc/libmandoc.h
+++ b/usr.bin/mandoc/libmandoc.h
@@ -1,4 +1,4 @@
-/* $Id: libmandoc.h,v 1.16 2011/12/02 01:45:43 schwarze Exp $ */
+/* $Id: libmandoc.h,v 1.17 2012/05/24 23:33:23 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -52,7 +52,7 @@ int mandoc_strntoi(const char *, size_t, int);
const char *mandoc_a2msec(const char*);
void mdoc_free(struct mdoc *);
-struct mdoc *mdoc_alloc(struct roff *, struct mparse *);
+struct mdoc *mdoc_alloc(struct roff *, struct mparse *, char *);
void mdoc_reset(struct mdoc *);
int mdoc_parseln(struct mdoc *, int, char *, int);
int mdoc_endparse(struct mdoc *);
diff --git a/usr.bin/mandoc/libmdoc.h b/usr.bin/mandoc/libmdoc.h
index 81bebbfbfe0..b2903007b1e 100644
--- a/usr.bin/mandoc/libmdoc.h
+++ b/usr.bin/mandoc/libmdoc.h
@@ -1,4 +1,4 @@
-/* $Id: libmdoc.h,v 1.48 2011/12/02 01:45:43 schwarze Exp $ */
+/* $Id: libmdoc.h,v 1.49 2012/05/24 23:33:23 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -24,6 +24,7 @@ enum mdoc_next {
struct mdoc {
struct mparse *parse; /* parse pointer */
+ char *defos; /* default argument for .Os */
int flags; /* parse flags */
#define MDOC_HALT (1 << 0) /* error in parse: halt */
#define MDOC_LITERAL (1 << 1) /* in a literal scope */
diff --git a/usr.bin/mandoc/main.c b/usr.bin/mandoc/main.c
index 8b7ff142397..036ae5a623b 100644
--- a/usr.bin/mandoc/main.c
+++ b/usr.bin/mandoc/main.c
@@ -1,7 +1,7 @@
-/* $Id: main.c,v 1.82 2011/12/25 17:34:57 schwarze Exp $ */
+/* $Id: main.c,v 1.83 2012/05/24 23:33:23 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2011, 2012 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -79,6 +79,7 @@ main(int argc, char *argv[])
struct curparse curp;
enum mparset type;
enum mandoclevel rc;
+ char *defos;
progname = strrchr(argv[0], '/');
if (progname == NULL)
@@ -98,10 +99,24 @@ main(int argc, char *argv[])
type = MPARSE_AUTO;
curp.outtype = OUTT_ASCII;
curp.wlevel = MANDOCLEVEL_FATAL;
+ defos = NULL;
/* LINTED */
- while (-1 != (c = getopt(argc, argv, "m:O:T:VW:")))
+ while (-1 != (c = getopt(argc, argv, "I:m:O:T:VW:")))
switch (c) {
+ case ('I'):
+ if (strncmp(optarg, "os=", 3)) {
+ fprintf(stderr, "-I%s: Bad argument\n",
+ optarg);
+ return((int)MANDOCLEVEL_BADARG);
+ }
+ if (defos) {
+ fprintf(stderr, "-I%s: Duplicate argument\n",
+ optarg);
+ return((int)MANDOCLEVEL_BADARG);
+ }
+ defos = mandoc_strdup(optarg + 3);
+ break;
case ('m'):
if ( ! moptions(&type, optarg))
return((int)MANDOCLEVEL_BADARG);
@@ -126,7 +141,7 @@ main(int argc, char *argv[])
/* NOTREACHED */
}
- curp.mp = mparse_alloc(type, curp.wlevel, mmsg, &curp);
+ curp.mp = mparse_alloc(type, curp.wlevel, mmsg, &curp, defos);
/*
* Conditionally start up the lookaside buffer before parsing.
@@ -153,6 +168,7 @@ main(int argc, char *argv[])
(*curp.outfree)(curp.outdata);
if (curp.mp)
mparse_free(curp.mp);
+ free(defos);
return((int)rc);
}
diff --git a/usr.bin/mandoc/mandoc.1 b/usr.bin/mandoc/mandoc.1
index dc740f2bf7e..7b4286b077c 100644
--- a/usr.bin/mandoc/mandoc.1
+++ b/usr.bin/mandoc/mandoc.1
@@ -1,4 +1,4 @@
-.\" $OpenBSD: mandoc.1,v 1.53 2011/12/25 20:15:54 schwarze Exp $
+.\" $OpenBSD: mandoc.1,v 1.54 2012/05/24 23:33:23 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\"
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: December 25 2011 $
+.Dd $Mdocdate: May 24 2012 $
.Dt MANDOC 1
.Os
.Sh NAME
@@ -23,6 +23,9 @@
.Sh SYNOPSIS
.Nm mandoc
.Op Fl V
+.Sm off
+.Op Fl I Cm os Li = Ar name
+.Sm on
.Op Fl m Ns Ar format
.Op Fl O Ns Ar option
.Op Fl T Ns Ar output
@@ -49,6 +52,15 @@ output.
.Pp
The arguments are as follows:
.Bl -tag -width Ds
+.Sm off
+.It Fl I Cm os Li = Ar name
+.Sm on
+Override the default operating system
+.Ar name
+for the
+.Xr mdoc 7
+.Sq \&Os
+macro.
.It Fl m Ns Ar format
Input format.
See
diff --git a/usr.bin/mandoc/mandoc.h b/usr.bin/mandoc/mandoc.h
index 10887828d8c..5a87c80fb26 100644
--- a/usr.bin/mandoc/mandoc.h
+++ b/usr.bin/mandoc/mandoc.h
@@ -1,4 +1,4 @@
-/* $Id: mandoc.h,v 1.43 2011/11/12 22:43:18 schwarze Exp $ */
+/* $Id: mandoc.h,v 1.44 2012/05/24 23:33:23 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -413,8 +413,8 @@ int mchars_spec2cp(const struct mchars *,
const char *, size_t);
const char *mchars_spec2str(const struct mchars *,
const char *, size_t, size_t *);
-struct mparse *mparse_alloc(enum mparset,
- enum mandoclevel, mandocmsg, void *);
+struct mparse *mparse_alloc(enum mparset, enum mandoclevel,
+ mandocmsg, void *, char *);
void mparse_free(struct mparse *);
void mparse_keep(struct mparse *);
enum mandoclevel mparse_readfd(struct mparse *, int, const char *);
diff --git a/usr.bin/mandoc/mandocdb.c b/usr.bin/mandoc/mandocdb.c
index 770db70a7ff..a67b82b2ee1 100644
--- a/usr.bin/mandoc/mandocdb.c
+++ b/usr.bin/mandoc/mandocdb.c
@@ -1,4 +1,4 @@
-/* $Id: mandocdb.c,v 1.41 2012/04/18 01:41:41 deraadt Exp $ */
+/* $Id: mandocdb.c,v 1.42 2012/05/24 23:33:23 schwarze Exp $ */
/*
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -374,7 +374,7 @@ mandocdb(int argc, char *argv[])
info.lorder = 4321;
info.flags = R_DUP;
- mp = mparse_alloc(MPARSE_AUTO, MANDOCLEVEL_FATAL, NULL, NULL);
+ mp = mparse_alloc(MPARSE_AUTO, MANDOCLEVEL_FATAL, NULL, NULL, NULL);
memset(&buf, 0, sizeof(struct buf));
memset(&dbuf, 0, sizeof(struct buf));
diff --git a/usr.bin/mandoc/mdoc.c b/usr.bin/mandoc/mdoc.c
index 80c1d32e919..1f812ed1042 100644
--- a/usr.bin/mandoc/mdoc.c
+++ b/usr.bin/mandoc/mdoc.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc.c,v 1.86 2011/09/30 00:13:21 schwarze Exp $ */
+/* $Id: mdoc.c,v 1.87 2012/05/24 23:33:23 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -193,13 +193,14 @@ mdoc_free(struct mdoc *mdoc)
* Allocate volatile and non-volatile parse resources.
*/
struct mdoc *
-mdoc_alloc(struct roff *roff, struct mparse *parse)
+mdoc_alloc(struct roff *roff, struct mparse *parse, char *defos)
{
struct mdoc *p;
p = mandoc_calloc(1, sizeof(struct mdoc));
p->parse = parse;
+ p->defos = defos;
p->roff = roff;
mdoc_hash_init();
diff --git a/usr.bin/mandoc/mdoc_validate.c b/usr.bin/mandoc/mdoc_validate.c
index 75a93f6e094..eabced7ac31 100644
--- a/usr.bin/mandoc/mdoc_validate.c
+++ b/usr.bin/mandoc/mdoc_validate.c
@@ -1,7 +1,7 @@
-/* $Id: mdoc_validate.c,v 1.101 2012/04/15 10:31:00 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.102 2012/05/24 23:33:23 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2011, 2012 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -2188,14 +2188,15 @@ post_os(POST_ARGS)
n = mdoc->last;
/*
- * Set the operating system by way of the `Os' macro. Note that
- * if an argument isn't provided and -DOSNAME="\"foo\"" is
- * provided during compilation, this value will be used instead
- * of filling in "sysname release" from uname().
+ * Set the operating system by way of the `Os' macro.
+ * The order of precedence is:
+ * 1. the argument of the `Os' macro, unless empty
+ * 2. the -Ios=foo command line argument, if provided
+ * 3. -DOSNAME="\"foo\"", if provided during compilation
+ * 4. "sysname release" from uname(3)
*/
- if (mdoc->meta.os)
- free(mdoc->meta.os);
+ free(mdoc->meta.os);
buf[0] = '\0';
if (-1 == (c = concat(buf, n->child, BUFSIZ))) {
@@ -2205,11 +2206,11 @@ post_os(POST_ARGS)
assert(c);
- /* XXX: yes, these can all be dynamically-adjusted buffers, but
- * it's really not worth the extra hackery.
- */
-
if ('\0' == buf[0]) {
+ if (mdoc->defos) {
+ mdoc->meta.os = mandoc_strdup(mdoc->defos);
+ return(1);
+ }
#ifdef OSNAME
if (strlcat(buf, OSNAME, BUFSIZ) >= BUFSIZ) {
mdoc_nmsg(mdoc, n, MANDOCERR_MEM);
diff --git a/usr.bin/mandoc/read.c b/usr.bin/mandoc/read.c
index d5d36ea11fe..ef726042c35 100644
--- a/usr.bin/mandoc/read.c
+++ b/usr.bin/mandoc/read.c
@@ -1,4 +1,4 @@
-/* $Id: read.c,v 1.6 2012/02/26 21:01:43 schwarze Exp $ */
+/* $Id: read.c,v 1.7 2012/05/24 23:33:23 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -54,6 +54,7 @@ struct mparse {
void *arg; /* argument to mmsg */
const char *file;
struct buf *secondary;
+ char *defos; /* default operating system */
};
static void resize_buf(struct buf *, size_t);
@@ -236,7 +237,8 @@ pset(const char *buf, int pos, struct mparse *curp)
switch (curp->inttype) {
case (MPARSE_MDOC):
if (NULL == curp->pmdoc)
- curp->pmdoc = mdoc_alloc(curp->roff, curp);
+ curp->pmdoc = mdoc_alloc(curp->roff, curp,
+ curp->defos);
assert(curp->pmdoc);
curp->mdoc = curp->pmdoc;
return;
@@ -252,7 +254,8 @@ 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->pmdoc = mdoc_alloc(curp->roff, curp,
+ curp->defos);
assert(curp->pmdoc);
curp->mdoc = curp->pmdoc;
return;
@@ -694,7 +697,8 @@ mparse_readfd(struct mparse *curp, int fd, const char *file)
}
struct mparse *
-mparse_alloc(enum mparset inttype, enum mandoclevel wlevel, mandocmsg mmsg, void *arg)
+mparse_alloc(enum mparset inttype, enum mandoclevel wlevel,
+ mandocmsg mmsg, void *arg, char *defos)
{
struct mparse *curp;
@@ -706,6 +710,7 @@ mparse_alloc(enum mparset inttype, enum mandoclevel wlevel, mandocmsg mmsg, void
curp->mmsg = mmsg;
curp->arg = arg;
curp->inttype = inttype;
+ curp->defos = defos;
curp->roff = roff_alloc(curp);
return(curp);