summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorschwarze <schwarze@openbsd.org>2014-11-11 19:03:10 +0000
committerschwarze <schwarze@openbsd.org>2014-11-11 19:03:10 +0000
commitfea7191929ced045cd419e96009c5358a79228ed (patch)
tree052de0280a591275db15292b2a47efbc942fc685
parentLocal APIC page doesn't need X permissions. (diff)
downloadwireguard-openbsd-fea7191929ced045cd419e96009c5358a79228ed.tar.xz
wireguard-openbsd-fea7191929ced045cd419e96009c5358a79228ed.zip
In man(1) mode without -a, stop searching after the first manual tree
that contained at least one match in order to not prefer mdoc(1) from ports over mdoc(7). As a bonus, this results in a speedup.
-rw-r--r--usr.bin/mandoc/cgi.c3
-rw-r--r--usr.bin/mandoc/main.c6
-rw-r--r--usr.bin/mandoc/mansearch.c10
-rw-r--r--usr.bin/mandoc/mansearch.h3
4 files changed, 18 insertions, 4 deletions
diff --git a/usr.bin/mandoc/cgi.c b/usr.bin/mandoc/cgi.c
index d3ac30f826f..979f570f460 100644
--- a/usr.bin/mandoc/cgi.c
+++ b/usr.bin/mandoc/cgi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cgi.c,v 1.39 2014/10/28 17:35:42 schwarze Exp $ */
+/* $OpenBSD: cgi.c,v 1.40 2014/11/11 19:03:10 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014 Ingo Schwarze <schwarze@usta.de>
@@ -976,6 +976,7 @@ pg_search(const struct req *req)
search.sec = req->q.sec;
search.outkey = "Nd";
search.argmode = req->q.equal ? ARG_NAME : ARG_EXPR;
+ search.firstmatch = 1;
paths.sz = 1;
paths.paths = mandoc_malloc(sizeof(char *));
diff --git a/usr.bin/mandoc/main.c b/usr.bin/mandoc/main.c
index 4c943cc04b1..bd9e3a74e0c 100644
--- a/usr.bin/mandoc/main.c
+++ b/usr.bin/mandoc/main.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: main.c,v 1.106 2014/11/11 02:43:11 schwarze Exp $ */
+/* $OpenBSD: main.c,v 1.107 2014/11/11 19:03:10 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011, 2012, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -287,6 +287,10 @@ main(int argc, char *argv[])
if (argc == 0)
usage(search.argmode);
+ if (search.argmode == ARG_NAME &&
+ outmode == OUTMODE_ONE)
+ search.firstmatch = 1;
+
/* Access the mandoc database. */
manpath_parse(&paths, conf_file, defpaths, auxpaths);
diff --git a/usr.bin/mandoc/mansearch.c b/usr.bin/mandoc/mansearch.c
index 04964ab7b83..d5c8360c0d2 100644
--- a/usr.bin/mandoc/mansearch.c
+++ b/usr.bin/mandoc/mansearch.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mansearch.c,v 1.35 2014/09/03 18:08:26 schwarze Exp $ */
+/* $OpenBSD: mansearch.c,v 1.36 2014/11/11 19:03:10 schwarze Exp $ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -344,6 +344,14 @@ mansearch(const struct mansearch *search,
sqlite3_finalize(s2);
sqlite3_close(db);
ohash_delete(&htab);
+
+ /*
+ * In man(1) mode, prefer matches in earlier trees
+ * over matches in later trees.
+ */
+
+ if (cur && search->firstmatch)
+ break;
}
qsort(*res, cur, sizeof(struct manpage), manpage_compare);
rc = 1;
diff --git a/usr.bin/mandoc/mansearch.h b/usr.bin/mandoc/mansearch.h
index fc8b46b7e1e..325193b0309 100644
--- a/usr.bin/mandoc/mansearch.h
+++ b/usr.bin/mandoc/mansearch.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: mansearch.h,v 1.14 2014/09/03 18:08:26 schwarze Exp $ */
+/* $OpenBSD: mansearch.h,v 1.15 2014/11/11 19:03:10 schwarze Exp $ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -94,6 +94,7 @@ struct mansearch {
const char *sec; /* mansection/NULL */
const char *outkey; /* show content of this macro */
enum argmode argmode; /* interpretation of arguments */
+ int firstmatch; /* first matching database only */
};
__BEGIN_DECLS