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
This commit is contained in:
Yuri Pankov 2018-10-16 17:17:11 +00:00
parent 9d5d89b209
commit a10034cb47
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=339385

View file

@ -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);