]> git.cameronkatri.com Git - mandoc.git/blobdiff - manpath.c
Support -Ios='OpenBSD 5.1' to override uname(3) as the source of the
[mandoc.git] / manpath.c
index 3a12496d485c601d137260a99baf5eb8e0da3201..b6d9574e3070da73c6c1f8c9bff790edf27949c7 100644 (file)
--- a/manpath.c
+++ b/manpath.c
@@ -1,4 +1,4 @@
-/*     $Id: manpath.c,v 1.7 2011/12/13 21:09:01 kristaps Exp $ */
+/*     $Id: manpath.c,v 1.8 2011/12/24 22:37:16 kristaps Exp $ */
 /*
  * Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -87,15 +87,54 @@ manpath_parse(struct manpaths *dirs, const char *file,
        free(buf);
        pclose(stream);
 #else
-       manpath_parseline(dirs, auxp);
+       char            *insert;
 
-       if (NULL == defp)
-               defp = getenv("MANPATH");
+       /* Always prepend -m. */
+       manpath_parseline(dirs, auxp);
+       /* If -M is given, it overrides everything else. */
+       if (NULL != defp) {
+               manpath_parseline(dirs, defp);
+               return;
+       }
+
+       /* MANPATH and man.conf(5) cooperate. */
+       defp = getenv("MANPATH");
+       if (NULL == file)
+               file = MAN_CONF_FILE;
+
+       /* No MANPATH; use man.conf(5) only. */
+       if (NULL == defp || '\0' == defp[0]) {
+               manpath_manconf(dirs, file);
+               return;
+       }
+
+       /* Prepend man.conf(5) to MANPATH. */
+       if (':' == defp[0]) {
+               manpath_manconf(dirs, file);
+               manpath_parseline(dirs, defp);
+               return;
+       }
 
-       if (NULL == defp)
-               manpath_manconf(dirs, file ? file : MAN_CONF_FILE);
-       else
+       /* Append man.conf(5) to MANPATH. */
+       if (':' == defp[(int)strlen(defp) - 1]) {
                manpath_parseline(dirs, defp);
+               manpath_manconf(dirs, file);
+               return;
+       }
+
+       /* Insert man.conf(5) into MANPATH. */
+       insert = strstr(defp, "::");
+       if (NULL != insert) {
+               *insert++ = '\0';
+               manpath_parseline(dirs, defp);
+               manpath_manconf(dirs, file);
+               manpath_parseline(dirs, insert + 1);
+               return;
+       }
+
+       /* MANPATH overrides man.conf(5) completely. */
+       manpath_parseline(dirs, defp);
 #endif
 }