=================================================================== RCS file: /cvs/mandoc/mdoc_validate.c,v retrieving revision 1.196 retrieving revision 1.203 diff -u -p -r1.196 -r1.203 --- mandoc/mdoc_validate.c 2013/10/06 22:46:15 1.196 +++ mandoc/mdoc_validate.c 2014/03/23 11:25:26 1.203 @@ -1,7 +1,8 @@ -/* $Id: mdoc_validate.c,v 1.196 2013/10/06 22:46:15 schwarze Exp $ */ +/* $Id: mdoc_validate.c,v 1.203 2014/03/23 11:25:26 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons - * Copyright (c) 2010, 2011, 2012, 2013 Ingo Schwarze + * Copyright (c) 2010-2014 Ingo Schwarze + * Copyright (c) 2010 Joerg Sonnenberger * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -35,6 +36,7 @@ #include "mdoc.h" #include "mandoc.h" +#include "mandoc_aux.h" #include "libmdoc.h" #include "libmandoc.h" @@ -1674,10 +1676,16 @@ ebool(struct mdoc *mdoc) assert(MDOC_TEXT == mdoc->last->child->type); - if (0 == strcmp(mdoc->last->child->string, "on")) + if (0 == strcmp(mdoc->last->child->string, "on")) { + if (MDOC_Sm == mdoc->last->tok) + mdoc->flags &= ~MDOC_SMOFF; return(1); - if (0 == strcmp(mdoc->last->child->string, "off")) + } + if (0 == strcmp(mdoc->last->child->string, "off")) { + if (MDOC_Sm == mdoc->last->tok) + mdoc->flags |= MDOC_SMOFF; return(1); + } mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADBOOL); return(1); @@ -1887,7 +1895,7 @@ post_hyph(POST_ARGS) if (MDOC_TEXT != nch->type) continue; cp = nch->string; - if (3 > strnlen(cp, 3)) + if ('\0' == *cp) continue; while ('\0' != *(++cp)) if ('-' == *cp && @@ -1985,10 +1993,10 @@ post_sh_head(POST_ARGS) /* The SYNOPSIS gets special attention in other areas. */ if (SEC_SYNOPSIS == sec) { - roff_setreg(mdoc->roff, "nS", 1); + roff_setreg(mdoc->roff, "nS", 1, '='); mdoc->flags |= MDOC_SYNOPSIS; } else { - roff_setreg(mdoc->roff, "nS", 0); + roff_setreg(mdoc->roff, "nS", 0, '='); mdoc->flags &= ~MDOC_SYNOPSIS; } @@ -2177,8 +2185,8 @@ post_dd(POST_ARGS) n = mdoc->last; if (NULL == n->child || '\0' == n->child->string[0]) { - mdoc->meta.date = mandoc_normdate - (mdoc->parse, NULL, n->line, n->pos); + mdoc->meta.date = mdoc->quick ? mandoc_strdup("") : + mandoc_normdate(mdoc->parse, NULL, n->line, n->pos); return(1); } @@ -2189,8 +2197,8 @@ post_dd(POST_ARGS) } assert(c); - mdoc->meta.date = mandoc_normdate - (mdoc->parse, buf, n->line, n->pos); + mdoc->meta.date = mdoc->quick ? mandoc_strdup(buf) : + mandoc_normdate(mdoc->parse, buf, n->line, n->pos); return(1); } @@ -2341,12 +2349,13 @@ post_bx(POST_ARGS) static int post_os(POST_ARGS) { - struct mdoc_node *n; char buf[BUFSIZ]; - int c; #ifndef OSNAME struct utsname utsname; + static char *defbuf; #endif + struct mdoc_node *n; + int c; n = mdoc->last; @@ -2369,39 +2378,31 @@ post_os(POST_ARGS) assert(c); - if ('\0' == buf[0]) { - if (mdoc->defos) { - mdoc->meta.os = mandoc_strdup(mdoc->defos); - return(1); - } + if ('\0' != *buf) { + mdoc->meta.os = mandoc_strdup(buf); + return(1); + } + + 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); - return(0); - } + mdoc->meta.os = mandoc_strdup(OSNAME); #else /*!OSNAME */ + if (NULL == defbuf) { if (-1 == uname(&utsname)) { mdoc_nmsg(mdoc, n, MANDOCERR_UNAME); - mdoc->meta.os = mandoc_strdup("UNKNOWN"); - return(post_prol(mdoc)); - } - - if (strlcat(buf, utsname.sysname, BUFSIZ) >= BUFSIZ) { - mdoc_nmsg(mdoc, n, MANDOCERR_MEM); - return(0); + defbuf = mandoc_strdup("UNKNOWN"); + } else if (-1 == asprintf(&defbuf, "%s %s", + utsname.sysname, utsname.release)) { + perror(NULL); + exit((int)MANDOCLEVEL_SYSERR); } - if (strlcat(buf, " ", BUFSIZ) >= BUFSIZ) { - mdoc_nmsg(mdoc, n, MANDOCERR_MEM); - return(0); - } - if (strlcat(buf, utsname.release, BUFSIZ) >= BUFSIZ) { - mdoc_nmsg(mdoc, n, MANDOCERR_MEM); - return(0); - } -#endif /*!OSNAME*/ } - - mdoc->meta.os = mandoc_strdup(buf); + mdoc->meta.os = mandoc_strdup(defbuf); +#endif /*!OSNAME*/ return(1); }