Author: bapt
Date: Fri Jul 26 09:51:35 2019
New Revision: 350349
URL: https://svnweb.freebsd.org/changeset/base/350349

Log:
  Import mandoc snapshot 2019-07-23

Deleted:
  vendor/mandoc/dist/libroff.h
Modified:
  vendor/mandoc/dist/Makefile.depend
  vendor/mandoc/dist/TODO
  vendor/mandoc/dist/arch.c
  vendor/mandoc/dist/cgi.c
  vendor/mandoc/dist/configure
  vendor/mandoc/dist/dbm.c
  vendor/mandoc/dist/dbm_map.h
  vendor/mandoc/dist/eqn.7
  vendor/mandoc/dist/eqn_html.c
  vendor/mandoc/dist/html.c
  vendor/mandoc/dist/html.h
  vendor/mandoc/dist/lib.in
  vendor/mandoc/dist/main.c
  vendor/mandoc/dist/man.7
  vendor/mandoc/dist/man_html.c
  vendor/mandoc/dist/man_term.c
  vendor/mandoc/dist/man_validate.c
  vendor/mandoc/dist/mandoc.1
  vendor/mandoc/dist/mandoc.c
  vendor/mandoc/dist/mandoc.css
  vendor/mandoc/dist/mandoc.h
  vendor/mandoc/dist/mandoc_char.7
  vendor/mandoc/dist/mandoc_headers.3
  vendor/mandoc/dist/mandoc_msg.c
  vendor/mandoc/dist/mandocdb.c
  vendor/mandoc/dist/manpath.c
  vendor/mandoc/dist/mansearch.c
  vendor/mandoc/dist/mansearch.h
  vendor/mandoc/dist/mdoc.7
  vendor/mandoc/dist/mdoc_argv.c
  vendor/mandoc/dist/mdoc_markdown.c
  vendor/mandoc/dist/mdoc_term.c
  vendor/mandoc/dist/mdoc_validate.c
  vendor/mandoc/dist/out.c
  vendor/mandoc/dist/read.c
  vendor/mandoc/dist/roff.7
  vendor/mandoc/dist/roff.c
  vendor/mandoc/dist/roff_html.c
  vendor/mandoc/dist/tag.c
  vendor/mandoc/dist/tbl_html.c
  vendor/mandoc/dist/tbl_term.c
  vendor/mandoc/dist/term.c

Modified: vendor/mandoc/dist/Makefile.depend
==============================================================================
--- vendor/mandoc/dist/Makefile.depend  Fri Jul 26 05:59:04 2019        
(r350348)
+++ vendor/mandoc/dist/Makefile.depend  Fri Jul 26 09:51:35 2019        
(r350349)
@@ -29,7 +29,7 @@ dbm.o: dbm.c config.h mansearch.h dbm_map.h dbm.h
 dbm_map.o: dbm_map.c config.h mansearch.h dbm_map.h dbm.h
 demandoc.o: demandoc.c config.h mandoc.h roff.h man.h mdoc.h mandoc_parse.h
 eqn.o: eqn.c config.h mandoc_aux.h mandoc.h roff.h eqn.h libmandoc.h 
eqn_parse.h
-eqn_html.o: eqn_html.c config.h mandoc.h eqn.h out.h html.h
+eqn_html.o: eqn_html.c config.h mandoc.h roff.h eqn.h out.h html.h
 eqn_term.o: eqn_term.c config.h eqn.h out.h term.h
 html.o: html.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h 
roff.h out.h html.h manconf.h main.h
 lib.o: lib.c config.h roff.h libmdoc.h lib.in
@@ -37,16 +37,16 @@ main.o: main.c config.h mandoc_aux.h mandoc.h mandoc_x
 man.o: man.c config.h mandoc_aux.h mandoc.h roff.h man.h libmandoc.h 
roff_int.h libman.h
 man_html.o: man_html.c config.h mandoc_aux.h mandoc.h roff.h man.h out.h 
html.h main.h
 man_macro.o: man_macro.c config.h mandoc.h roff.h man.h libmandoc.h roff_int.h 
libman.h
-man_term.o: man_term.c config.h mandoc_aux.h roff.h man.h out.h term.h main.h
+man_term.o: man_term.c config.h mandoc_aux.h mandoc.h roff.h man.h out.h 
term.h tag.h main.h
 man_validate.o: man_validate.c config.h mandoc_aux.h mandoc.h roff.h man.h 
libmandoc.h roff_int.h libman.h
 mandoc.o: mandoc.c config.h mandoc_aux.h mandoc.h roff.h libmandoc.h roff_int.h
 mandoc_aux.o: mandoc_aux.c config.h mandoc.h mandoc_aux.h
-mandoc_msg.o: mandoc_msg.c mandoc.h
+mandoc_msg.o: mandoc_msg.c config.h mandoc.h
 mandoc_ohash.o: mandoc_ohash.c mandoc_aux.h mandoc_ohash.h compat_ohash.h
 mandoc_xr.o: mandoc_xr.c mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc_xr.h
 mandocd.o: mandocd.c config.h mandoc.h roff.h mdoc.h man.h mandoc_parse.h 
main.h manconf.h
 mandocdb.o: mandocdb.c config.h compat_fts.h mandoc_aux.h mandoc_ohash.h 
compat_ohash.h mandoc.h roff.h mdoc.h man.h mandoc_parse.h manconf.h 
mansearch.h dba_array.h dba.h
-manpath.o: manpath.c config.h mandoc_aux.h manconf.h
+manpath.o: manpath.c config.h mandoc_aux.h mandoc.h manconf.h
 mansearch.o: mansearch.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h 
manconf.h mansearch.h dbm.h
 mdoc.o: mdoc.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h libmandoc.h 
roff_int.h libmdoc.h
 mdoc_argv.o: mdoc_argv.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h 
libmandoc.h roff_int.h libmdoc.h
@@ -67,10 +67,10 @@ roff_term.o: roff_term.c mandoc.h roff.h out.h term.h
 roff_validate.o: roff_validate.c mandoc.h roff.h libmandoc.h roff_int.h
 soelim.o: soelim.c config.h compat_stringlist.h
 st.o: st.c config.h mandoc.h roff.h libmdoc.h
-tag.o: tag.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h tag.h
+tag.o: tag.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h tag.h
 tbl.o: tbl.c config.h mandoc_aux.h mandoc.h tbl.h libmandoc.h tbl_parse.h 
tbl_int.h
 tbl_data.o: tbl_data.c config.h mandoc_aux.h mandoc.h tbl.h libmandoc.h 
tbl_int.h
-tbl_html.o: tbl_html.c config.h mandoc.h tbl.h out.h html.h
+tbl_html.o: tbl_html.c config.h mandoc.h roff.h tbl.h out.h html.h
 tbl_layout.o: tbl_layout.c config.h mandoc_aux.h mandoc.h tbl.h libmandoc.h 
tbl_int.h
 tbl_opts.o: tbl_opts.c config.h mandoc.h tbl.h libmandoc.h tbl_int.h
 tbl_term.o: tbl_term.c config.h mandoc.h tbl.h out.h term.h

Modified: vendor/mandoc/dist/TODO
==============================================================================
--- vendor/mandoc/dist/TODO     Fri Jul 26 05:59:04 2019        (r350348)
+++ vendor/mandoc/dist/TODO     Fri Jul 26 09:51:35 2019        (r350349)
@@ -1,6 +1,6 @@
 ************************************************************************
 * Official mandoc TODO.
-* $Id: TODO,v 1.289 2019/03/04 13:01:57 schwarze Exp $
+* $Id: TODO,v 1.295 2019/06/11 16:04:36 schwarze Exp $
 ************************************************************************
 
 Many issues are annotated for difficulty as follows:
@@ -62,6 +62,27 @@ are mere guesses, and some may be wrong.
   needed for Tcl_NewStringObj(3) via wiz@  Wed, 5 Mar 2014 22:27:43 +0100
   loc **  exist ***  algo ***  size *  imp ***
 
+- .als only works for macros in mandoc, not for user-defined strings.
+  Also, the "val" field in struct roffkv would have to be replaced
+  with a pointer to a reference-counted wrapper, and an alias
+  would have to point to the same wrapper as the original.
+  .als to undefined does nothing; the alias is not created.
+  .rm'ing the original leaves the alias to point to the old value.
+  .de .als .de changes both, but
+  .de .als .rm .de only changes the new value, not the alias.
+  Found in groffer(1) version 1.19
+  Jan Stary 20 Apr 2019 20:16:54 +0200
+  loc *  exist **  algo **  size **  imp *
+
+- roff string condition comparisons fail when vars contain quotes:
+  .ds s '
+  .if '\*s'' \&...
+  hard to fix because of the basic architecture (string replacement
+  happens before roff(7) syntax parsing)
+  Found in groffer(1) version 1.19
+  Jan Stary 20 Apr 2019 20:16:54 +0200
+  loc *  exist ***  algo ***  size **  imp *
+
 --- missing mdoc features ----------------------------------------------
 
 - .Bl -column .Xo support is missing
@@ -263,6 +284,9 @@ are mere guesses, and some may be wrong.
   http://ikiwiki.info/plugins/contrib/mandoc/
   https://github.com/schmonz/ikiwiki/compare/mandoc
   Amitai Schlair  Mon, 19 May 2014 14:05:53 -0400
+
+- check compatibility with
+  https://git.sr.ht/~sircmpwn/scdoc
 
 - check features of the Slackware man.conf(5) format
   Carsten Kunze  Wed, 11 Mar 2015 17:57:24 +0100

Modified: vendor/mandoc/dist/arch.c
==============================================================================
--- vendor/mandoc/dist/arch.c   Fri Jul 26 05:59:04 2019        (r350348)
+++ vendor/mandoc/dist/arch.c   Fri Jul 26 09:51:35 2019        (r350349)
@@ -1,4 +1,4 @@
-/*     $Id: arch.c,v 1.14 2019/03/04 13:01:57 schwarze Exp $ */
+/*     $Id: arch.c,v 1.15 2019/05/21 07:52:00 schwarze Exp $ */
 /*
  * Copyright (c) 2017, 2019 Ingo Schwarze <schwa...@openbsd.org>
  *
@@ -26,7 +26,7 @@ arch_valid(const char *arch, enum mandoc_os os)
        const char *openbsd_arch[] = {
                "alpha", "amd64", "arm64", "armv7", "hppa", "i386",
                "landisk", "loongson", "luna88k", "macppc", "mips64",
-               "octeon", "sgi", "socppc", "sparc64", NULL
+               "octeon", "sgi", "sparc64", NULL
        };
        const char *netbsd_arch[] = {
                "acorn26", "acorn32", "algor", "alpha", "amiga",

Modified: vendor/mandoc/dist/cgi.c
==============================================================================
--- vendor/mandoc/dist/cgi.c    Fri Jul 26 05:59:04 2019        (r350348)
+++ vendor/mandoc/dist/cgi.c    Fri Jul 26 09:51:35 2019        (r350349)
@@ -1,4 +1,4 @@
-/*     $Id: cgi.c,v 1.166 2019/03/06 12:32:41 schwarze Exp $ */
+/*     $Id: cgi.c,v 1.167 2019/07/10 12:49:20 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <krist...@bsd.lv>
  * Copyright (c) 2014, 2015, 2016, 2017, 2018 Ingo Schwarze <schwa...@usta.de>
@@ -869,7 +869,6 @@ resp_format(const struct req *req, const char *file)
        memset(&conf, 0, sizeof(conf));
        conf.fragment = 1;
        conf.style = mandoc_strdup(CSS_DIR "/mandoc.css");
-       conf.toc = 1;
        usepath = strcmp(req->q.manpath, req->p[0]);
        mandoc_asprintf(&conf.man, "/%s%s%s%s%%N.%%S",
            scriptname, *scriptname == '\0' ? "" : "/",

Modified: vendor/mandoc/dist/configure
==============================================================================
--- vendor/mandoc/dist/configure        Fri Jul 26 05:59:04 2019        
(r350348)
+++ vendor/mandoc/dist/configure        Fri Jul 26 09:51:35 2019        
(r350349)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $Id: configure,v 1.70 2019/03/06 16:04:31 schwarze Exp $
+# $Id: configure,v 1.71 2019/07/01 22:56:24 schwarze Exp $
 #
 # Copyright (c) 2014-2019 Ingo Schwarze <schwa...@openbsd.org>
 #
@@ -529,7 +529,7 @@ fi
        echo "extern    char     *mkdtemp(char *);"
 
 if [ ${HAVE_PROGNAME} -eq 0 ]; then
-       echo "extern    const char *getprogname(void);"
+       echo "extern    const char *getprogname(void);"
        echo "extern    void      setprogname(const char *);"
 fi
 

Modified: vendor/mandoc/dist/dbm.c
==============================================================================
--- vendor/mandoc/dist/dbm.c    Fri Jul 26 05:59:04 2019        (r350348)
+++ vendor/mandoc/dist/dbm.c    Fri Jul 26 09:51:35 2019        (r350349)
@@ -1,4 +1,4 @@
-/*     $Id: dbm.c,v 1.6 2018/11/19 19:22:07 schwarze Exp $ */
+/*     $Id: dbm.c,v 1.7 2019/07/01 22:56:24 schwarze Exp $ */
 /*
  * Copyright (c) 2016 Ingo Schwarze <schwa...@openbsd.org>
  *
@@ -233,7 +233,7 @@ static struct dbm_res
 page_bytitle(enum iter arg_iter, const struct dbm_match *arg_match)
 {
        static const struct dbm_match   *match;
-       static const char               *cp;    
+       static const char               *cp;
        static int32_t                   ip;
        struct dbm_res                   res = {-1, 0};
 
@@ -315,7 +315,7 @@ page_byarch(const struct dbm_match *arg_match)
        static const struct dbm_match   *match;
        struct dbm_res                   res = {-1, 0};
        static int32_t                   ip;
-       const char                      *cp;    
+       const char                      *cp;
 
        /* Initialize for a new iteration. */
 

Modified: vendor/mandoc/dist/dbm_map.h
==============================================================================
--- vendor/mandoc/dist/dbm_map.h        Fri Jul 26 05:59:04 2019        
(r350348)
+++ vendor/mandoc/dist/dbm_map.h        Fri Jul 26 09:51:35 2019        
(r350349)
@@ -1,4 +1,4 @@
-/*     $Id: dbm_map.h,v 1.1 2016/07/19 21:31:55 schwarze Exp $ */
+/*     $Id: dbm_map.h,v 1.2 2019/07/01 22:56:24 schwarze Exp $ */
 /*
  * Copyright (c) 2016 Ingo Schwarze <schwa...@openbsd.org>
  *
@@ -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.
  *
- * Private interface for low-level routines for the map-based version 
+ * Private interface for low-level routines for the map-based version
  * of the mandoc database, for read-only access.
  * To be used by dbm*.c only.
  */

Modified: vendor/mandoc/dist/eqn.7
==============================================================================
--- vendor/mandoc/dist/eqn.7    Fri Jul 26 05:59:04 2019        (r350348)
+++ vendor/mandoc/dist/eqn.7    Fri Jul 26 09:51:35 2019        (r350349)
@@ -1,4 +1,4 @@
-.\"    $Id: eqn.7,v 1.37 2017/09/04 10:35:27 schwarze Exp $
+.\"    $Id: eqn.7,v 1.38 2019/04/23 17:57:49 schwarze Exp $
 .\"
 .\" Copyright (c) 2011 Kristaps Dzonsons <krist...@bsd.lv>
 .\" Copyright (c) 2014 Ingo Schwarze <schwa...@openbsd.org>
@@ -15,7 +15,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: September 4 2017 $
+.Dd $Mdocdate: April 23 2019 $
 .Dt EQN 7
 .Os
 .Sh NAME
@@ -470,7 +470,7 @@ commands are also ignored.
 .%T System for Typesetting Mathematics
 .%J Communications of the ACM
 .%V 18
-.%P 151\(en157
+.%P pp. 151\(en157
 .%D March, 1975
 .Re
 .Rs

Modified: vendor/mandoc/dist/eqn_html.c
==============================================================================
--- vendor/mandoc/dist/eqn_html.c       Fri Jul 26 05:59:04 2019        
(r350348)
+++ vendor/mandoc/dist/eqn_html.c       Fri Jul 26 09:51:35 2019        
(r350349)
@@ -1,4 +1,4 @@
-/*     $Id: eqn_html.c,v 1.18 2018/12/13 05:23:38 schwarze Exp $ */
+/*     $Id: eqn_html.c,v 1.19 2019/03/17 18:21:45 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2014 Kristaps Dzonsons <krist...@bsd.lv>
  * Copyright (c) 2017 Ingo Schwarze <schwa...@openbsd.org>
@@ -26,6 +26,7 @@
 #include <string.h>
 
 #include "mandoc.h"
+#include "roff.h"
 #include "eqn.h"
 #include "out.h"
 #include "html.h"

Modified: vendor/mandoc/dist/html.c
==============================================================================
--- vendor/mandoc/dist/html.c   Fri Jul 26 05:59:04 2019        (r350348)
+++ vendor/mandoc/dist/html.c   Fri Jul 26 09:51:35 2019        (r350349)
@@ -1,4 +1,4 @@
-/*     $Id: html.c,v 1.254 2019/03/03 13:02:11 schwarze Exp $ */
+/*     $Id: html.c,v 1.255 2019/04/30 15:53:00 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <krist...@bsd.lv>
  * Copyright (c) 2011-2015, 2017-2019 Ingo Schwarze <schwa...@openbsd.org>
@@ -120,6 +120,7 @@ static      void     print_ctag(struct html *, struct tag 
*);
 static int      print_escape(struct html *, char);
 static int      print_encode(struct html *, const char *, const char *, int);
 static void     print_href(struct html *, const char *, const char *, int);
+static void     print_metaf(struct html *);
 
 
 void *
@@ -222,55 +223,49 @@ print_gen_head(struct html *h)
        print_tagq(h, t);
 }
 
-void
-print_metaf(struct html *h, enum mandoc_esc deco)
+int
+html_setfont(struct html *h, enum mandoc_esc font)
 {
-       enum htmlfont    font;
-
-       switch (deco) {
+       switch (font) {
        case ESCAPE_FONTPREV:
                font = h->metal;
                break;
        case ESCAPE_FONTITALIC:
-               font = HTMLFONT_ITALIC;
-               break;
        case ESCAPE_FONTBOLD:
-               font = HTMLFONT_BOLD;
-               break;
        case ESCAPE_FONTBI:
-               font = HTMLFONT_BI;
-               break;
        case ESCAPE_FONTCW:
-               font = HTMLFONT_CW;
+       case ESCAPE_FONTROMAN:
                break;
        case ESCAPE_FONT:
-       case ESCAPE_FONTROMAN:
-               font = HTMLFONT_NONE;
+               font = ESCAPE_FONTROMAN;
                break;
        default:
-               return;
+               return 0;
        }
+       h->metal = h->metac;
+       h->metac = font;
+       return 1;
+}
 
+static void
+print_metaf(struct html *h)
+{
        if (h->metaf) {
                print_tagq(h, h->metaf);
                h->metaf = NULL;
        }
-
-       h->metal = h->metac;
-       h->metac = font;
-
-       switch (font) {
-       case HTMLFONT_ITALIC:
+       switch (h->metac) {
+       case ESCAPE_FONTITALIC:
                h->metaf = print_otag(h, TAG_I, "");
                break;
-       case HTMLFONT_BOLD:
+       case ESCAPE_FONTBOLD:
                h->metaf = print_otag(h, TAG_B, "");
                break;
-       case HTMLFONT_BI:
+       case ESCAPE_FONTBI:
                h->metaf = print_otag(h, TAG_B, "");
                print_otag(h, TAG_I, "");
                break;
-       case HTMLFONT_CW:
+       case ESCAPE_FONTCW:
                h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
                break;
        default:
@@ -479,7 +474,8 @@ print_encode(struct html *h, const char *p, const char
                case ESCAPE_FONTROMAN:
                        if (0 == norecurse) {
                                h->flags |= HTML_NOSPACE;
-                               print_metaf(h, esc);
+                               if (html_setfont(h, esc))
+                                       print_metaf(h);
                                h->flags &= ~HTML_NOSPACE;
                        }
                        continue;
@@ -806,27 +802,9 @@ print_text(struct html *h, const char *word)
                        print_word(h, "&#x00A0;");
        }
 
-       assert(NULL == h->metaf);
-       switch (h->metac) {
-       case HTMLFONT_ITALIC:
-               h->metaf = print_otag(h, TAG_I, "");
-               break;
-       case HTMLFONT_BOLD:
-               h->metaf = print_otag(h, TAG_B, "");
-               break;
-       case HTMLFONT_BI:
-               h->metaf = print_otag(h, TAG_B, "");
-               print_otag(h, TAG_I, "");
-               break;
-       case HTMLFONT_CW:
-               h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
-               break;
-       default:
-               print_indent(h);
-               break;
-       }
-
-       assert(word);
+       assert(h->metaf == NULL);
+       print_metaf(h);
+       print_indent(h);
        if ( ! print_encode(h, word, NULL, 0)) {
                if ( ! (h->flags & HTML_NONOSPACE))
                        h->flags &= ~HTML_NOSPACE;
@@ -834,7 +812,7 @@ print_text(struct html *h, const char *word)
        } else
                h->flags |= HTML_NOSPACE | HTML_NONEWLINE;
 
-       if (h->metaf) {
+       if (h->metaf != NULL) {
                print_tagq(h, h->metaf);
                h->metaf = NULL;
        }

Modified: vendor/mandoc/dist/html.h
==============================================================================
--- vendor/mandoc/dist/html.h   Fri Jul 26 05:59:04 2019        (r350348)
+++ vendor/mandoc/dist/html.h   Fri Jul 26 09:51:35 2019        (r350349)
@@ -1,4 +1,4 @@
-/*     $Id: html.h,v 1.102 2019/03/01 10:57:18 schwarze Exp $ */
+/*     $Id: html.h,v 1.103 2019/04/30 15:53:00 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <krist...@bsd.lv>
  * Copyright (c) 2017, 2018, 2019 Ingo Schwarze <schwa...@openbsd.org>
@@ -69,15 +69,6 @@ enum htmltag {
        TAG_MAX
 };
 
-enum   htmlfont {
-       HTMLFONT_NONE = 0,
-       HTMLFONT_BOLD,
-       HTMLFONT_ITALIC,
-       HTMLFONT_BI,
-       HTMLFONT_CW,
-       HTMLFONT_MAX
-};
-
 struct tag {
        struct tag       *next;
        int               refcnt;
@@ -111,8 +102,8 @@ struct      html {
        char             *base_includes; /* base for include href */
        char             *style; /* style-sheet URI */
        struct tag       *metaf; /* current open font scope */
-       enum htmlfont     metal; /* last used font */
-       enum htmlfont     metac; /* current font mode */
+       enum mandoc_esc   metal; /* last used font */
+       enum mandoc_esc   metac; /* current font mode */
        int               oflags; /* output options */
 #define        HTML_FRAGMENT    (1 << 0) /* don't emit HTML/HEAD/BODY */
 #define        HTML_TOC         (1 << 1) /* emit a table of contents */
@@ -128,7 +119,6 @@ void                  roff_html_pre(struct html *, const 
struct roff
 void             print_gen_comment(struct html *, struct roff_node *);
 void             print_gen_decls(struct html *);
 void             print_gen_head(struct html *);
-void             print_metaf(struct html *, enum mandoc_esc);
 struct tag      *print_otag(struct html *, enum htmltag, const char *, ...);
 void             print_tagq(struct html *, const struct tag *);
 void             print_stagq(struct html *, const struct tag *);
@@ -141,3 +131,4 @@ void                  print_endline(struct html *);
 void             html_close_paragraph(struct html *);
 enum roff_tok    html_fillmode(struct html *, enum roff_tok);
 char            *html_make_id(const struct roff_node *, int);
+int              html_setfont(struct html *, enum mandoc_esc);

Modified: vendor/mandoc/dist/lib.in
==============================================================================
--- vendor/mandoc/dist/lib.in   Fri Jul 26 05:59:04 2019        (r350348)
+++ vendor/mandoc/dist/lib.in   Fri Jul 26 09:51:35 2019        (r350349)
@@ -1,4 +1,4 @@
-/*     $Id: lib.in,v 1.21 2019/03/04 17:35:21 schwarze Exp $ */
+/*     $Id: lib.in,v 1.22 2019/07/01 22:56:24 schwarze Exp $ */
 /*
  * Copyright (c) 2009 Kristaps Dzonsons <krist...@bsd.lv>
  * Copyright (c) 2009, 2012 Joerg Sonnenberger <jo...@netbsd.org>
@@ -43,7 +43,7 @@ LINE("libcipher",     "FreeSec Crypt Library (libcipher, \
 LINE("libcompat",      "Compatibility Library (libcompat, \\-lcompat)")
 LINE("libcrypt",       "Crypt Library (libcrypt, \\-lcrypt)")
 LINE("libcurses",      "Curses Library (libcurses, \\-lcurses)")
-LINE("libcuse",        "Userland Character Device Library (libcuse, \\-lcuse)")
+LINE("libcuse",                "Userland Character Device Library (libcuse, 
\\-lcuse)")
 LINE("libdevattr",     "Device attribute and event library (libdevattr, 
\\-ldevattr)")
 LINE("libdevctl",      "Device Control Library (libdevctl, \\-ldevctl)")
 LINE("libdevinfo",     "Device and Resource Information Utility Library 
(libdevinfo, \\-ldevinfo)")

Modified: vendor/mandoc/dist/main.c
==============================================================================
--- vendor/mandoc/dist/main.c   Fri Jul 26 05:59:04 2019        (r350348)
+++ vendor/mandoc/dist/main.c   Fri Jul 26 09:51:35 2019        (r350349)
@@ -1,4 +1,4 @@
-/*     $Id: main.c,v 1.322 2019/03/06 10:18:58 schwarze Exp $ */
+/*     $Id: main.c,v 1.332 2019/07/19 20:27:25 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <krist...@bsd.lv>
  * Copyright (c) 2010-2012, 2014-2019 Ingo Schwarze <schwa...@openbsd.org>
@@ -21,6 +21,7 @@
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/param.h> /* MACHINE */
+#include <sys/stat.h>
 #include <sys/wait.h>
 
 #include <assert.h>
@@ -97,13 +98,10 @@ static      int               fs_lookup(const struct 
manpaths *,
 static int               fs_search(const struct mansearch *,
                                const struct manpaths *, int, char**,
                                struct manpage **, size_t *);
-static int               koptions(int *, char *);
-static void              moptions(int *, char *);
 static void              outdata_alloc(struct curparse *);
 static void              parse(struct curparse *, int, const char *);
-static void              passthrough(const char *, int, int);
+static void              passthrough(int, int);
 static pid_t             spawn_pager(struct tag_files *);
-static int               toptions(struct curparse *, char *);
 static void              usage(enum argmode) __attribute__((__noreturn__));
 static int               woptions(struct curparse *, char *);
 
@@ -125,7 +123,7 @@ main(int argc, char *argv[])
        char            *conf_file, *defpaths, *auxpaths;
        char            *oarg, *tagarg;
        unsigned char   *uc;
-       size_t           i, sz;
+       size_t           i, sz, ssz;
        int              prio, best_prio;
        enum outmode     outmode;
        int              fd, startdir;
@@ -154,10 +152,11 @@ main(int argc, char *argv[])
                return mandocdb(argc, argv);
 
 #if HAVE_PLEDGE
-       if (pledge("stdio rpath tmppath tty proc exec", NULL) == -1)
-               err((int)MANDOCLEVEL_SYSERR, "pledge");
+       if (pledge("stdio rpath tmppath tty proc exec", NULL) == -1) {
+               mandoc_msg(MANDOCERR_PLEDGE, 0, 0, "%s", strerror(errno));
+               return mandoc_msg_getrc();
+       }
 #endif
-
 #if HAVE_SANDBOX_INIT
        if (sandbox_init(kSBXProfileNoInternet, SANDBOX_NAMED, NULL) == -1)
                errx((int)MANDOCLEVEL_SYSERR, "sandbox_init");
@@ -221,19 +220,29 @@ main(int argc, char *argv[])
                        outmode = OUTMODE_ALL;
                        break;
                case 'I':
-                       if (strncmp(optarg, "os=", 3)) {
-                               warnx("-I %s: Bad argument", optarg);
-                               return (int)MANDOCLEVEL_BADARG;
+                       if (strncmp(optarg, "os=", 3) != 0) {
+                               mandoc_msg(MANDOCERR_BADARG_BAD, 0, 0,
+                                   "-I %s", optarg);
+                               return mandoc_msg_getrc();
                        }
                        if (curp.os_s != NULL) {
-                               warnx("-I %s: Duplicate argument", optarg);
-                               return (int)MANDOCLEVEL_BADARG;
+                               mandoc_msg(MANDOCERR_BADARG_DUPE, 0, 0,
+                                   "-I %s", optarg);
+                               return mandoc_msg_getrc();
                        }
                        curp.os_s = mandoc_strdup(optarg + 3);
                        break;
                case 'K':
-                       if ( ! koptions(&options, optarg))
-                               return (int)MANDOCLEVEL_BADARG;
+                       options &= ~(MPARSE_UTF8 | MPARSE_LATIN1);
+                       if (strcmp(optarg, "utf-8") == 0)
+                               options |=  MPARSE_UTF8;
+                       else if (strcmp(optarg, "iso-8859-1") == 0)
+                               options |=  MPARSE_LATIN1;
+                       else if (strcmp(optarg, "us-ascii") != 0) {
+                               mandoc_msg(MANDOCERR_BADARG_BAD, 0, 0,
+                                   "-K %s", optarg);
+                               return mandoc_msg_getrc();
+                       }
                        break;
                case 'k':
                        search.argmode = ARG_EXPR;
@@ -258,12 +267,37 @@ main(int argc, char *argv[])
                        search.sec = optarg;
                        break;
                case 'T':
-                       if ( ! toptions(&curp, optarg))
-                               return (int)MANDOCLEVEL_BADARG;
+                       if (strcmp(optarg, "ascii") == 0)
+                               curp.outtype = OUTT_ASCII;
+                       else if (strcmp(optarg, "lint") == 0) {
+                               curp.outtype = OUTT_LINT;
+                               mandoc_msg_setoutfile(stdout);
+                               mandoc_msg_setmin(MANDOCERR_BASE);
+                       } else if (strcmp(optarg, "tree") == 0)
+                               curp.outtype = OUTT_TREE;
+                       else if (strcmp(optarg, "man") == 0)
+                               curp.outtype = OUTT_MAN;
+                       else if (strcmp(optarg, "html") == 0)
+                               curp.outtype = OUTT_HTML;
+                       else if (strcmp(optarg, "markdown") == 0)
+                               curp.outtype = OUTT_MARKDOWN;
+                       else if (strcmp(optarg, "utf8") == 0)
+                               curp.outtype = OUTT_UTF8;
+                       else if (strcmp(optarg, "locale") == 0)
+                               curp.outtype = OUTT_LOCALE;
+                       else if (strcmp(optarg, "ps") == 0)
+                               curp.outtype = OUTT_PS;
+                       else if (strcmp(optarg, "pdf") == 0)
+                               curp.outtype = OUTT_PDF;
+                       else {
+                               mandoc_msg(MANDOCERR_BADARG_BAD, 0, 0,
+                                   "-T %s", optarg);
+                               return mandoc_msg_getrc();
+                       }
                        break;
                case 'W':
-                       if ( ! woptions(&curp, optarg))
-                               return (int)MANDOCLEVEL_BADARG;
+                       if (woptions(&curp, optarg) == -1)
+                               return mandoc_msg_getrc();
                        break;
                case 'w':
                        outmode = OUTMODE_FLN;
@@ -299,12 +333,9 @@ main(int argc, char *argv[])
                        search.outkey = oarg;
                else {
                        while (oarg != NULL) {
-                               thisarg = oarg;
                                if (manconf_output(&conf.output,
-                                   strsep(&oarg, ","), 0) == 0)
-                                       continue;
-                               warnx("-O %s: Bad argument", thisarg);
-                               return (int)MANDOCLEVEL_BADARG;
+                                   strsep(&oarg, ","), 0) == -1)
+                                       return mandoc_msg_getrc();
                        }
                }
        }
@@ -328,9 +359,13 @@ main(int argc, char *argv[])
        }
 
 #if HAVE_PLEDGE
-       if (!use_pager)
-               if (pledge("stdio rpath", NULL) == -1)
-                       err((int)MANDOCLEVEL_SYSERR, "pledge");
+       if (use_pager == 0) {
+               if (pledge("stdio rpath", NULL) == -1) {
+                       mandoc_msg(MANDOCERR_PLEDGE, 0, 0,
+                           "%s", strerror(errno));
+                       return mandoc_msg_getrc();
+               }
+       }
 #endif
 
        /* Parse arguments. */
@@ -355,7 +390,7 @@ main(int argc, char *argv[])
                } else if (argc > 1 &&
                    ((uc = (unsigned char *)argv[0]) != NULL) &&
                    ((isdigit(uc[0]) && (uc[1] == '\0' ||
-                     (isalpha(uc[1]) && uc[2] == '\0'))) ||
+                     isalpha(uc[1]))) ||
                     (uc[0] == 'n' && uc[1] == '\0'))) {
                        search.sec = (char *)uc;
                        argv++;
@@ -395,7 +430,7 @@ main(int argc, char *argv[])
                        usage(search.argmode);
 
                if (sz == 0 && search.argmode == ARG_NAME)
-                       fs_search(&search, &conf.manpath,
+                       (void)fs_search(&search, &conf.manpath,
                            argc, argv, &res, &sz);
 
                if (search.argmode == ARG_NAME) {
@@ -403,7 +438,10 @@ main(int argc, char *argv[])
                                if (strchr(argv[c], '/') == NULL)
                                        continue;
                                if (access(argv[c], R_OK) == -1) {
-                                       warn("%s", argv[c]);
+                                       mandoc_msg_setinfilename(argv[c]);
+                                       mandoc_msg(MANDOCERR_BADARG_BAD,
+                                           0, 0, "%s", strerror(errno));
+                                       mandoc_msg_setinfilename(NULL);
                                        continue;
                                }
                                res = mandoc_reallocarray(res,
@@ -411,6 +449,7 @@ main(int argc, char *argv[])
                                res[sz].file = mandoc_strdup(argv[c]);
                                res[sz].names = NULL;
                                res[sz].output = NULL;
+                               res[sz].bits = 0;
                                res[sz].ipath = SIZE_MAX;
                                res[sz].sec = 10;
                                res[sz].form = FORM_SRC;
@@ -433,7 +472,7 @@ main(int argc, char *argv[])
 
                if (outmode == OUTMODE_ONE) {
                        argc = 1;
-                       best_prio = 20;
+                       best_prio = 40;
                } else if (outmode == OUTMODE_ALL)
                        argc = (int)sz;
 
@@ -452,10 +491,21 @@ main(int argc, char *argv[])
                                sec = res[i].file;
                                sec += strcspn(sec, "123456789");
                                if (sec[0] == '\0')
-                                       continue;
+                                       continue; /* No section at all. */
                                prio = sec_prios[sec[0] - '1'];
-                               if (sec[1] != '/')
-                                       prio += 10;
+                               if (search.sec != NULL) {
+                                       ssz = strlen(search.sec);
+                                       if (strncmp(sec, search.sec, ssz) == 0)
+                                               sec += ssz;
+                               } else
+                                       sec++; /* Prefer without suffix. */
+                               if (*sec != '/')
+                                       prio += 10; /* Wrong dir name. */
+                               if (search.sec != NULL &&
+                                   (strlen(sec) <= ssz  + 3 ||
+                                    strcmp(sec + strlen(sec) - ssz,
+                                     search.sec) != 0))
+                                       prio += 20; /* Wrong file ext. */
                                if (prio >= best_prio)
                                        continue;
                                best_prio = prio;
@@ -477,16 +527,26 @@ main(int argc, char *argv[])
 
 #if HAVE_PLEDGE
        if (use_pager) {
-               if (pledge("stdio rpath tmppath tty proc exec", NULL) == -1)
-                       err((int)MANDOCLEVEL_SYSERR, "pledge");
+               if (pledge("stdio rpath tmppath tty proc exec", NULL) == -1) {
+                       mandoc_msg(MANDOCERR_PLEDGE, 0, 0,
+                           "%s", strerror(errno));
+                       return mandoc_msg_getrc();
+               }
        } else {
-               if (pledge("stdio rpath", NULL) == -1)
-                       err((int)MANDOCLEVEL_SYSERR, "pledge");
+               if (pledge("stdio rpath", NULL) == -1) {
+                       mandoc_msg(MANDOCERR_PLEDGE, 0, 0,
+                           "%s", strerror(errno));
+                       return mandoc_msg_getrc();
+               }
        }
 #endif
 
-       if (search.argmode == ARG_FILE)
-               moptions(&options, auxpaths);
+       if (search.argmode == ARG_FILE && auxpaths != NULL) {
+               if (strcmp(auxpaths, "doc") == 0)
+                       options |= MPARSE_MDOC;
+               else if (strcmp(auxpaths, "an") == 0)
+                       options |= MPARSE_MAN;
+       }
 
        mchars_alloc();
        curp.mp = mparse_alloc(options, curp.os_e, curp.os_s);
@@ -494,7 +554,8 @@ main(int argc, char *argv[])
        if (argc < 1) {
                if (use_pager) {
                        tag_files = tag_init();
-                       tag_files->tagname = conf.output.tag;
+                       if (tag_files != NULL)
+                               tag_files->tagname = conf.output.tag;
                }
                thisarg = "<stdin>";
                mandoc_msg_setinfilename(thisarg);
@@ -527,30 +588,31 @@ main(int argc, char *argv[])
                } else
                        thisarg = *argv;
 
+               mandoc_msg_setinfilename(thisarg);
                fd = mparse_open(curp.mp, thisarg);
                if (fd != -1) {
                        if (use_pager) {
                                use_pager = 0;
                                tag_files = tag_init();
-                               tag_files->tagname = conf.output.tag;
+                               if (tag_files != NULL)
+                                       tag_files->tagname = conf.output.tag;
                        }
 
-                       mandoc_msg_setinfilename(thisarg);
                        if (resp == NULL || resp->form == FORM_SRC)
                                parse(&curp, fd, thisarg);
                        else
-                               passthrough(resp->file, fd,
-                                   conf.output.synopsisonly);
-                       mandoc_msg_setinfilename(NULL);
+                               passthrough(fd, conf.output.synopsisonly);
 
                        if (ferror(stdout)) {
                                if (tag_files != NULL) {
-                                       warn("%s", tag_files->ofn);
+                                       mandoc_msg(MANDOCERR_WRITE, 0, 0,
+                                           "%s: %s", tag_files->ofn,
+                                           strerror(errno));
                                        tag_unlink();
                                        tag_files = NULL;
                                } else
-                                       warn("stdout");
-                               mandoc_msg_setrc(MANDOCLEVEL_SYSERR);
+                                       mandoc_msg(MANDOCERR_WRITE, 0, 0,
+                                           "%s", strerror(errno));
                                break;
                        }
 
@@ -560,9 +622,11 @@ main(int argc, char *argv[])
                                terminal_sepline(curp.outdata);
                        }
                } else
-                       mandoc_msg(MANDOCERR_FILE, 0, 0,
-                           "%s: %s", thisarg, strerror(errno));
+                       mandoc_msg(resp == NULL ? MANDOCERR_BADARG_BAD :
+                           MANDOCERR_OPEN, 0, 0, "%s", strerror(errno));
 
+               mandoc_msg_setinfilename(NULL);
+
                if (curp.wstop && mandoc_msg_getrc() != MANDOCLEVEL_OK)
                        break;
 
@@ -653,8 +717,8 @@ out:
                                continue;
 
                        if (pid == -1) {
-                               warn("wait");
-                               mandoc_msg_setrc(MANDOCLEVEL_SYSERR);
+                               mandoc_msg(MANDOCERR_WAIT, 0, 0,
+                                   "%s", strerror(errno));
                                break;
                        }
                        if (!WIFSTOPPED(status))
@@ -663,14 +727,16 @@ out:
                        signum = WSTOPSIG(status);
                }
                tag_unlink();
-       }
+       } else if (curp.outtype != OUTT_LINT &&
+           (search.argmode == ARG_FILE || sz > 0))
+               mandoc_msg_summary();
+
        return (int)mandoc_msg_getrc();
 }
 
 static void
 usage(enum argmode argmode)
 {
-
        switch (argmode) {
        case ARG_FILE:
                fputs("usage: mandoc [-ac] [-I os=name] "
@@ -701,6 +767,7 @@ fs_lookup(const struct manpaths *paths, size_t ipath,
        const char *sec, const char *arch, const char *name,
        struct manpage **res, size_t *ressz)
 {
+       struct stat      sb;
        glob_t           globinfo;
        struct manpage  *page;
        char            *file;
@@ -710,13 +777,13 @@ fs_lookup(const struct manpaths *paths, size_t ipath,
        form = FORM_SRC;
        mandoc_asprintf(&file, "%s/man%s/%s.%s",
            paths->paths[ipath], sec, name, sec);
-       if (access(file, R_OK) != -1)
+       if (stat(file, &sb) != -1)
                goto found;
        free(file);
 
        mandoc_asprintf(&file, "%s/cat%s/%s.0",
            paths->paths[ipath], sec, name);
-       if (access(file, R_OK) != -1) {
+       if (stat(file, &sb) != -1) {
                form = FORM_CAT;
                goto found;
        }
@@ -725,7 +792,7 @@ fs_lookup(const struct manpaths *paths, size_t ipath,
        if (arch != NULL) {
                mandoc_asprintf(&file, "%s/man%s/%s/%s.%s",
                    paths->paths[ipath], sec, arch, name, sec);
-               if (access(file, R_OK) != -1)
+               if (stat(file, &sb) != -1)
                        goto found;
                free(file);
        }
@@ -734,37 +801,42 @@ fs_lookup(const struct manpaths *paths, size_t ipath,
            paths->paths[ipath], sec, name);
        globres = glob(file, 0, NULL, &globinfo);
        if (globres != 0 && globres != GLOB_NOMATCH)
-               warn("%s: glob", file);
+               mandoc_msg(MANDOCERR_GLOB, 0, 0,
+                   "%s: %s", file, strerror(errno));
        free(file);
        if (globres == 0)
                file = mandoc_strdup(*globinfo.gl_pathv);
        globfree(&globinfo);
-       if (globres == 0)
-               goto found;
+       if (globres == 0) {
+               if (stat(file, &sb) != -1)
+                       goto found;
+               free(file);
+       }
        if (res != NULL || ipath + 1 != paths->sz)
-               return 0;
+               return -1;
 
        mandoc_asprintf(&file, "%s.%s", name, sec);
-       globres = access(file, R_OK);
+       globres = stat(file, &sb);
        free(file);
-       return globres != -1;
+       return globres;
 
 found:
        warnx("outdated mandoc.db lacks %s(%s) entry, run %s %s",
            name, sec, BINM_MAKEWHATIS, paths->paths[ipath]);
        if (res == NULL) {
                free(file);
-               return 1;
+               return 0;
        }
-       *res = mandoc_reallocarray(*res, ++*ressz, sizeof(struct manpage));
+       *res = mandoc_reallocarray(*res, ++*ressz, sizeof(**res));
        page = *res + (*ressz - 1);
        page->file = file;
        page->names = NULL;
        page->output = NULL;
+       page->bits = NAME_FILE & NAME_MASK;
        page->ipath = ipath;
        page->sec = (*sec >= '1' && *sec <= '9') ? *sec - '1' + 1 : 10;
        page->form = form;
-       return 1;
+       return 0;
 }
 
 static int
@@ -786,14 +858,14 @@ fs_search(const struct mansearch *cfg, const struct ma
                for (ipath = 0; ipath < paths->sz; ipath++) {
                        if (cfg->sec != NULL) {
                                if (fs_lookup(paths, ipath, cfg->sec,
-                                   cfg->arch, *argv, res, ressz) &&
+                                   cfg->arch, *argv, res, ressz) != -1 &&
                                    cfg->firstmatch)
-                                       return 1;
+                                       return 0;
                        } else for (isec = 0; isec < nsec; isec++)
                                if (fs_lookup(paths, ipath, sections[isec],
-                                   cfg->arch, *argv, res, ressz) &&
+                                   cfg->arch, *argv, res, ressz) != -1 &&
                                    cfg->firstmatch)
-                                       return 1;
+                                       return 0;
                }
                if (res != NULL && *ressz == lastsz &&
                    strchr(*argv, '/') == NULL) {
@@ -812,7 +884,7 @@ fs_search(const struct mansearch *cfg, const struct ma
                argv++;
                argc--;
        }
-       return 0;
+       return -1;
 }
 
 static void
@@ -919,7 +991,7 @@ check_xr(void)
                search.firstmatch = 1;
                if (mansearch(&search, &paths, 1, &xr->name, NULL, &sz))
                        continue;
-               if (fs_search(&search, &paths, 1, &xr->name, NULL, &sz))
+               if (fs_search(&search, &paths, 1, &xr->name, NULL, &sz) != -1)
                        continue;
                if (xr->count == 1)
                        mandoc_msg(MANDOCERR_XR_BAD, xr->line,
@@ -959,34 +1031,34 @@ outdata_alloc(struct curparse *curp)
 }
 
 static void
-passthrough(const char *file, int fd, int synopsis_only)
+passthrough(int fd, int synopsis_only)
 {
        const char       synb[] = "S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS";
        const char       synr[] = "SYNOPSIS";
 
        FILE            *stream;
-       const char      *syscall;
        char            *line, *cp;
        size_t           linesz;
        ssize_t          len, written;
-       int              print;
+       int              lno, print;
 
+       stream = NULL;
        line = NULL;
        linesz = 0;
 
        if (fflush(stdout) == EOF) {
-               syscall = "fflush";
-               goto fail;
+               mandoc_msg(MANDOCERR_FFLUSH, 0, 0, "%s", strerror(errno));
+               goto done;
        }
-
        if ((stream = fdopen(fd, "r")) == NULL) {
                close(fd);
-               syscall = "fdopen";
-               goto fail;
+               mandoc_msg(MANDOCERR_FDOPEN, 0, 0, "%s", strerror(errno));
+               goto done;
        }
 
-       print = 0;
+       lno = print = 0;
        while ((len = getline(&line, &linesz, stream)) != -1) {
+               lno++;
                cp = line;
                if (synopsis_only) {
                        if (print) {
@@ -1004,97 +1076,23 @@ passthrough(const char *file, int fd, int synopsis_onl
                        }
                }
                for (; len > 0; len -= written) {
-                       if ((written = write(STDOUT_FILENO, cp, len)) != -1)
-                               continue;
-                       fclose(stream);
-                       syscall = "write";
-                       goto fail;
+                       if ((written = write(STDOUT_FILENO, cp, len)) == -1) {
+                               mandoc_msg(MANDOCERR_WRITE, 0, 0,
+                                   "%s", strerror(errno));
+                               goto done;
+                       }
                }
        }
+       if (ferror(stream))
+               mandoc_msg(MANDOCERR_GETLINE, lno, 0, "%s", strerror(errno));
 
-       if (ferror(stream)) {
-               fclose(stream);
-               syscall = "getline";
-               goto fail;
-       }
-
 done:
        free(line);
-       fclose(stream);
-       return;
-
-fail:
-       free(line);
-       warn("%s: SYSERR: %s", file, syscall);
-       mandoc_msg_setrc(MANDOCLEVEL_SYSERR);
+       if (stream != NULL)

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to