summaryrefslogtreecommitdiffstatshomepage
path: root/mdocterm.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-02-27 10:55:16 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-02-27 10:55:16 +0000
commit1b1e02d4acd11f96e061ac04ae243ab0589d2f8a (patch)
treeaacd84e9909dbc35bcd0716bef7ee3f216a0796f /mdocterm.c
parent3cd681acae540f380510bee14cd2ef802fbf4706 (diff)
downloadmandoc-1b1e02d4acd11f96e061ac04ae243ab0589d2f8a.tar.gz
mandoc-1b1e02d4acd11f96e061ac04ae243ab0589d2f8a.tar.zst
mandoc-1b1e02d4acd11f96e061ac04ae243ab0589d2f8a.zip
Slowly decoupling mdoc(3) from being OpenBSD-only.VERSION_1_3_6
Diffstat (limited to 'mdocterm.c')
-rw-r--r--mdocterm.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/mdocterm.c b/mdocterm.c
index d7fbc69a..3e2f70f0 100644
--- a/mdocterm.c
+++ b/mdocterm.c
@@ -1,4 +1,4 @@
-/* $Id: mdocterm.c,v 1.17 2009/02/27 09:14:02 kristaps Exp $ */
+/* $Id: mdocterm.c,v 1.18 2009/02/27 10:55:16 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -16,6 +16,8 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
+#include <sys/utsname.h>
+
#include <assert.h>
#include <ctype.h>
#include <err.h>
@@ -674,15 +676,21 @@ footer(struct termp *p, const struct mdoc_meta *meta)
static void
header(struct termp *p, const struct mdoc_meta *meta)
{
- char *buf, *title, *bufp;
+ char *buf, *title, *bufp, *vbuf;
const char *pp;
+ struct utsname uts;
+
+ p->rmargin = p->maxrmargin;
+ p->offset = 0;
if (NULL == (buf = malloc(p->rmargin)))
err(1, "malloc");
if (NULL == (title = malloc(p->rmargin)))
err(1, "malloc");
+ if (NULL == (vbuf = malloc(p->rmargin)))
+ err(1, "malloc");
- if (NULL == (pp = mdoc_vol2a(meta->vol)))
+ if (NULL == (pp = mdoc_vol2a(meta->vol))) {
switch (meta->msec) {
case (MSEC_1):
/* FALLTHROUGH */
@@ -707,11 +715,20 @@ header(struct termp *p, const struct mdoc_meta *meta)
pp = mdoc_vol2a(VOL_KM);
break;
default:
- /* FIXME: capitalise. */
- if (NULL == (pp = mdoc_msec2a(meta->msec)))
- pp = mdoc_msec2a(MSEC_local);
break;
}
+ }
+ vbuf[0] = 0;
+
+ if (pp) {
+ if (-1 == uname(&uts))
+ err(1, "uname");
+ (void)strlcat(vbuf, uts.sysname, p->rmargin);
+ (void)strlcat(vbuf, " ", p->rmargin);
+ } else if (NULL == (pp = mdoc_msec2a(meta->msec)))
+ pp = mdoc_msec2a(MSEC_local);
+
+ (void)strlcat(vbuf, pp, p->rmargin);
/*
* The header is strange. It has three components, which are
@@ -728,9 +745,9 @@ header(struct termp *p, const struct mdoc_meta *meta)
if (mdoc_arch2a(meta->arch))
(void)snprintf(buf, p->rmargin, "%s (%s)",
- pp, mdoc_arch2a(meta->arch));
+ vbuf, mdoc_arch2a(meta->arch));
else
- (void)strlcpy(buf, pp, p->rmargin);
+ (void)strlcpy(buf, vbuf, p->rmargin);
pp = mdoc_msec2a(meta->msec);
@@ -767,5 +784,6 @@ header(struct termp *p, const struct mdoc_meta *meta)
p->flags &= ~TERMP_NOSPACE;
free(title);
+ free(vbuf);
free(buf);
}