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);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to