]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_action.c
Added `%U' to -mdoc (doesn't render in a nice way yet).
[mandoc.git] / mdoc_action.c
index 1beef02cbaf496ceb62891ac51ff87445bddff94..52533b23817385a2311a43638d1b278a0aa33103 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_action.c,v 1.39 2009/09/24 15:01:06 kristaps Exp $ */
+/*     $Id: mdoc_action.c,v 1.43 2009/10/24 05:52:13 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -186,6 +186,7 @@ static      const struct actions mdoc_actions[MDOC_MAX] = {
        { NULL, NULL }, /* %Q */
        { NULL, NULL }, /* br */
        { NULL, NULL }, /* sp */
+       { NULL, NULL }, /* %U */
 };
 
 #define        RSORD_MAX 13
@@ -520,7 +521,15 @@ static int
 post_os(POST_ARGS)
 {
        char              buf[64];
+#ifndef        OSNAME
        struct utsname    utsname;
+#endif
+
+       /*
+        * Setting OSNAME to be the name of the target operating system,
+        * e.g., "OpenBSD 4.4", will result in the compile-time constant
+        * by supplied instead of the value in uname().
+        */
 
        if (m->meta.os)
                free(m->meta.os);
@@ -530,6 +539,10 @@ post_os(POST_ARGS)
                return(0);
 
        if (0 == buf[0]) {
+#ifdef OSNAME
+               if (strlcat(buf, OSNAME, 64) >= 64)
+                       return(mdoc_nerr(m, n, EUTSNAME));
+#else
                if (-1 == uname(&utsname))
                        return(mdoc_nerr(m, n, EUTSNAME));
                if (strlcat(buf, utsname.sysname, 64) >= 64)
@@ -538,6 +551,7 @@ post_os(POST_ARGS)
                        return(mdoc_nerr(m, n, ETOOLONG));
                if (strlcat(buf, utsname.release, 64) >= 64)
                        return(mdoc_nerr(m, n, ETOOLONG));
+#endif
        }
 
        if (NULL == (m->meta.os = strdup(buf)))
@@ -934,6 +948,7 @@ order_rs(int t)
 }
 
 
+/* ARGSUSED */
 static int
 post_rs(POST_ARGS)
 {
@@ -943,6 +958,7 @@ post_rs(POST_ARGS)
        if (MDOC_BLOCK != n->type)
                return(1);
 
+       assert(n->body->child);
        for (next = NULL, nn = n->body->child->next; nn; nn = next) {
                o = order_rs(nn->tok);