aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mansearch.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2019-04-30 18:51:57 +0000
committerIngo Schwarze <schwarze@openbsd.org>2019-04-30 18:51:57 +0000
commitd01c0c49e94a1aa06cfb7222d031a4d3e1f2e18a (patch)
tree528a8c13443fe687d14cca18e98f0010b56fdf1b /mansearch.c
parentc97489f192655f4c659019bb01065f81365849a8 (diff)
downloadmandoc-d01c0c49e94a1aa06cfb7222d031a4d3e1f2e18a.tar.gz
mandoc-d01c0c49e94a1aa06cfb7222d031a4d3e1f2e18a.tar.zst
mandoc-d01c0c49e94a1aa06cfb7222d031a4d3e1f2e18a.zip
In man(1) mode, i.e. when asking for a single manual page by name,
prefer file name matches over .Dt/.TH matches over first NAME matches over later NAME matches, but do not change the ordering for apropos(1) nor for man -a. This reverts main.c rev. 1.310 and mansearch.h rev. 1.29 and includes a partial revert of mansearch.c rev. 1.79. Regression reported by Lorenzo Beretta <loreb at github> as part of https://github.com/void-linux/void-packages/issues/9868 .
Diffstat (limited to 'mansearch.c')
-rw-r--r--mansearch.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/mansearch.c b/mansearch.c
index 0c457f95..19a55788 100644
--- a/mansearch.c
+++ b/mansearch.c
@@ -1,4 +1,4 @@
-/* $Id: mansearch.c,v 1.80 2018/12/13 11:55:46 schwarze Exp $ */
+/* $Id: mansearch.c,v 1.81 2019/04/30 18:51:57 schwarze Exp $ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013-2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -199,6 +199,7 @@ 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->sec = *page->sect - '0';
if (mpage->sec < 0 || mpage->sec > 9)
@@ -294,8 +295,10 @@ manmerge_term(struct expr *e, struct ohash *htab)
break;
slot = ohash_lookup_memory(htab,
(char *)&res, sizeof(res.page), res.page);
- if ((rp = ohash_find(htab, slot)) != NULL)
+ if ((rp = ohash_find(htab, slot)) != NULL) {
+ rp->bits |= res.bits;
continue;
+ }
rp = mandoc_malloc(sizeof(*rp));
*rp = res;
ohash_insert(htab, slot, rp);
@@ -408,7 +411,8 @@ manpage_compare(const void *vp1, const void *vp2)
mp1 = vp1;
mp2 = vp2;
- if ((diff = mp1->sec - mp2->sec))
+ if ((diff = mp2->bits - mp1->bits) ||
+ (diff = mp1->sec - mp2->sec))
return diff;
/* Fall back to alphabetic ordering of names. */