svn commit: r339385 - head/contrib/mandoc
Yuri Pankov
yuripv at FreeBSD.org
Tue Oct 16 17:17:12 UTC 2018
Author: yuripv
Date: Tue Oct 16 17:17:11 2018
New Revision: 339385
URL: https://svnweb.freebsd.org/changeset/base/339385
Log:
apropos/whatis: use output of manpath(1) to set defpaths if -M is not
specified. This fixes searching the paths specified in
/usr/local/etc/man.d/*.conf, as currently apropos/whatis from mandoc
suite aren't aware about them.
PR: 227922
Reviewed by: bapt
Approved by: re (gjb), kib (mentor)
Differential Revision: https://reviews.freebsd.org/D17454
Modified:
head/contrib/mandoc/main.c
Modified: head/contrib/mandoc/main.c
==============================================================================
--- head/contrib/mandoc/main.c Tue Oct 16 17:00:42 2018 (r339384)
+++ head/contrib/mandoc/main.c Tue Oct 16 17:17:11 2018 (r339385)
@@ -248,7 +248,13 @@ main(int argc, char *argv[])
outmode = OUTMODE_ALL;
break;
case 'M':
+#ifdef __FreeBSD__
+ defpaths = strdup(optarg);
+ if (defpaths == NULL)
+ err(1, "strdup");
+#else
defpaths = optarg;
+#endif
break;
case 'm':
auxpaths = optarg;
@@ -380,9 +386,34 @@ main(int argc, char *argv[])
outmode == OUTMODE_ONE)
search.firstmatch = 1;
+#ifdef __FreeBSD__
+ /*
+ * Use manpath(1) to populate defpaths if -M is not specified.
+ * Don't treat any failures as fatal.
+ */
+ if (defpaths == NULL) {
+ FILE *fp;
+ size_t linecap = 0;
+ ssize_t linelen;
+
+ if ((fp = popen("/usr/bin/manpath -q", "r")) != NULL) {
+ if ((linelen = getline(&defpaths,
+ &linecap, fp)) > 0) {
+ /* Strip trailing newline */
+ defpaths[linelen - 1] = '\0';
+ }
+ pclose(fp);
+ }
+ }
+#endif
+
/* Access the mandoc database. */
manconf_parse(&conf, conf_file, defpaths, auxpaths);
+#ifdef __FreeBSD__
+ free(defpaths);
+#endif
+
if ( ! mansearch(&search, &conf.manpath,
argc, argv, &res, &sz))
usage(search.argmode);
More information about the svn-src-all
mailing list