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-head mailing list