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:
parent
fcee4d935b
commit
1f8b04b5a3
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user