=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/manpath.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** src/usr.bin/mandoc/manpath.c 2011/12/19 02:26:33 1.3 --- src/usr.bin/mandoc/manpath.c 2011/12/24 21:51:40 1.4 *************** *** 1,4 **** ! /* $Id: manpath.c,v 1.3 2011/12/19 02:26:33 schwarze Exp $ */ /* * Copyright (c) 2011 Ingo Schwarze * Copyright (c) 2011 Kristaps Dzonsons --- 1,4 ---- ! /* $Id: manpath.c,v 1.4 2011/12/24 21:51:40 schwarze Exp $ */ /* * Copyright (c) 2011 Ingo Schwarze * Copyright (c) 2011 Kristaps Dzonsons *************** *** 38,53 **** manpath_parse(struct manpaths *dirs, const char *file, char *defp, char *auxp) { manpath_parseline(dirs, auxp); ! if (NULL == defp) ! defp = getenv("MANPATH"); ! if (NULL == defp) ! manpath_manconf(dirs, file ? file : MAN_CONF_FILE); ! else manpath_parseline(dirs, defp); } /* --- 38,91 ---- manpath_parse(struct manpaths *dirs, const char *file, char *defp, char *auxp) { + char *insert; + /* 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; + } + + /* 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); } /*