]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandocdb.c
in apropos(1) output, sort names and avoid multiple section numbers
[mandoc.git] / mandocdb.c
index da72aa7e495f0d85914d1272e7dff6898d9d7f19..eea9ab1cf0c18cae74d0534b76b67db3236ae1e9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mandocdb.c,v 1.112 2014/01/19 22:41:25 schwarze Exp $ */
+/*     $Id: mandocdb.c,v 1.114 2014/01/22 20:58:39 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -956,6 +956,7 @@ mlink_check(struct mpage *mpage, struct mlink *mlink)
 static void
 mpages_merge(struct mchars *mc, struct mparse *mp)
 {
+       char                     any[] = "any";
        struct ohash_info        str_info;
        struct mpage            *mpage;
        struct mlink            *mlink;
@@ -1027,7 +1028,7 @@ mpages_merge(struct mchars *mc, struct mparse *mp)
                }
                putkey(mpage, mpage->sec, TYPE_sec);
                putkey(mpage, '\0' == *mpage->arch ?
-                   "any" : mpage->arch, TYPE_arch);
+                   any : mpage->arch, TYPE_arch);
 
                for (mlink = mpage->mlinks; mlink; mlink = mlink->next) {
                        if ('\0' != *mlink->dsec)
@@ -1035,7 +1036,7 @@ mpages_merge(struct mchars *mc, struct mparse *mp)
                        if ('\0' != *mlink->fsec)
                                putkey(mpage, mlink->fsec, TYPE_sec);
                        putkey(mpage, '\0' == *mlink->arch ?
-                           "any" : mlink->arch, TYPE_arch);
+                           any : mlink->arch, TYPE_arch);
                        putkey(mpage, mlink->name, TYPE_Nm);
                }
 
@@ -1663,7 +1664,7 @@ static void
 render_key(struct mchars *mc, struct str *key)
 {
        size_t           sz, bsz, pos;
-       char             utfbuf[7], res[5];
+       char             utfbuf[7], res[6];
        char            *buf;
        const char      *seq, *cpp, *val;
        int              len, u;
@@ -1675,7 +1676,8 @@ render_key(struct mchars *mc, struct str *key)
        res[1] = '\t';
        res[2] = ASCII_NBRSP;
        res[3] = ASCII_HYPH;
-       res[4] = '\0';
+       res[4] = ASCII_BREAK;
+       res[5] = '\0';
 
        val = key->key;
        bsz = strlen(val);
@@ -1706,15 +1708,23 @@ render_key(struct mchars *mc, struct str *key)
                        val += sz;
                }
 
-               if (ASCII_HYPH == *val) {
+               switch (*val) {
+               case (ASCII_HYPH):
                        buf[pos++] = '-';
                        val++;
                        continue;
-               } else if ('\t' == *val || ASCII_NBRSP == *val) {
+               case ('\t'):
+                       /* FALLTHROUGH */
+               case (ASCII_NBRSP):
                        buf[pos++] = ' ';
                        val++;
+                       /* FALLTHROUGH */
+               case (ASCII_BREAK):
                        continue;
-               } else if ('\\' != *val)
+               default:
+                       break;
+               }
+               if ('\\' != *val)
                        break;
 
                /* Read past the slash. */