aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_validate.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2012-05-27 17:48:57 +0000
committerIngo Schwarze <schwarze@openbsd.org>2012-05-27 17:48:57 +0000
commit5924b5736a3bec0c2ef93ddbd1da733745942d59 (patch)
tree1df37aca7cb87b5dba851f42f6052cdfcb19f89b /mdoc_validate.c
parent75264eae65dc293d4a49cd965f67b124bc6fb138 (diff)
downloadmandoc-5924b5736a3bec0c2ef93ddbd1da733745942d59.tar.gz
mandoc-5924b5736a3bec0c2ef93ddbd1da733745942d59.tar.zst
mandoc-5924b5736a3bec0c2ef93ddbd1da733745942d59.zip
Support -Ios='OpenBSD 5.1' to override uname(3) as the source of the
default value for the mdoc(7) .Os macro. Needed for man.cgi on the OpenBSD website. Problem with man.cgi first noticed by deraadt@; beck@ and deraadt@ agree with the way to solve the issue. "Please check them in and I'll look into them later!" kristaps@
Diffstat (limited to 'mdoc_validate.c')
-rw-r--r--mdoc_validate.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/mdoc_validate.c b/mdoc_validate.c
index 07fd6873..d4a0b8d3 100644
--- a/mdoc_validate.c
+++ b/mdoc_validate.c
@@ -1,7 +1,7 @@
-/* $Id: mdoc_validate.c,v 1.183 2012/05/27 17:39:28 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.184 2012/05/27 17:48:57 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
@@ -2192,14 +2192,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))) {
@@ -2209,11 +2210,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);