=================================================================== RCS file: /cvs/mandoc/mandocdb.c,v retrieving revision 1.112 retrieving revision 1.114 diff -u -p -r1.112 -r1.114 --- mandoc/mandocdb.c 2014/01/19 22:41:25 1.112 +++ mandoc/mandocdb.c 2014/01/22 20:58:39 1.114 @@ -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 * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze @@ -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. */