=================================================================== RCS file: /cvs/mandoc/mansearch.c,v retrieving revision 1.77 retrieving revision 1.84 diff -u -p -r1.77 -r1.84 --- mandoc/mansearch.c 2017/08/22 17:50:11 1.77 +++ mandoc/mansearch.c 2023/04/28 19:11:03 1.84 @@ -1,7 +1,7 @@ -/* $Id: mansearch.c,v 1.77 2017/08/22 17:50:11 schwarze Exp $ */ +/* $Id: mansearch.c,v 1.84 2023/04/28 19:11:03 schwarze Exp $ */ /* * Copyright (c) 2012 Kristaps Dzonsons - * Copyright (c) 2013-2017 Ingo Schwarze + * Copyright (c) 2013-2018 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -36,7 +36,6 @@ #include #include -#include "mandoc.h" #include "mandoc_aux.h" #include "mandoc_ohash.h" #include "manconf.h" @@ -192,7 +191,7 @@ mansearch(const struct mansearch *search, mpage->file, R_OK) == -1) { warn("%s", mpage->file); warnx("outdated mandoc.db contains " - "bogus %s entry, run makewhatis %s", + "bogus %s entry, run makewhatis %s", page->file + 1, paths->paths[i]); free(mpage->file); free(rp); @@ -200,8 +199,8 @@ mansearch(const struct mansearch *search, } mpage->names = buildnames(page); mpage->output = buildoutput(outkey, page); + mpage->bits = search->firstmatch ? rp->bits : 0; mpage->ipath = i; - mpage->bits = rp->bits; mpage->sec = *page->sect - '0'; if (mpage->sec < 0 || mpage->sec > 9) mpage->sec = 10; @@ -221,7 +220,7 @@ mansearch(const struct mansearch *search, if (cur && search->firstmatch) break; } - if (res != NULL) + if (res != NULL && cur > 1) qsort(*res, cur, sizeof(struct manpage), manpage_compare); if (chdir_status && getcwd_status && chdir(buf) == -1) warn("%s", buf); @@ -492,7 +491,7 @@ lstlen(const char *cp, size_t sep) /* * Print the NUL-terminated list of NUL-terminated strings - * into the buffer, seperating strings with sep. + * into the buffer, separating strings with sep. */ static void lstcat(char *buf, size_t *i, const char *cp, const char *sep) @@ -774,8 +773,9 @@ exprterm(const struct mansearch *search, int argc, cha cs = 0; } else if ((val = strpbrk(argv[*argi], "=~")) == NULL) { e->bits = TYPE_Nm | TYPE_Nd; - e->match.type = DBM_SUB; - e->match.str = argv[*argi]; + e->match.type = DBM_REGEX; + val = argv[*argi]; + cs = 0; } else { if (val == argv[*argi]) e->bits = TYPE_Nm | TYPE_Nd;