diff options
author | 2014-09-01 22:45:53 +0000 | |
---|---|---|
committer | 2014-09-01 22:45:53 +0000 | |
commit | 3c042f1c04abf0fec8866a305452f7fd2ac8639c (patch) | |
tree | a70710051aa68570973231dbad3e5af7771599a2 | |
parent | baf73424c69a2aa19a4dbd317ca8b72d21c33c1b (diff) | |
download | mandoc-3c042f1c04abf0fec8866a305452f7fd2ac8639c.tar.gz mandoc-3c042f1c04abf0fec8866a305452f7fd2ac8639c.tar.zst mandoc-3c042f1c04abf0fec8866a305452f7fd2ac8639c.zip |
In man(1) mode, change to the right directory before starting the parser,
just like traditional man(1) does, such that .so links have a chance to
work. After this point, we don't need the current directory for anything
else before exit, so we don't need to worry about getting back and we can
safely ignore failure.
-rw-r--r-- | main.c | 10 | ||||
-rw-r--r-- | mansearch.c | 3 | ||||
-rw-r--r-- | mansearch.h | 3 |
3 files changed, 10 insertions, 6 deletions
@@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.188 2014/08/30 18:08:10 schwarze Exp $ */ +/* $Id: main.c,v 1.189 2014/09/01 22:45:53 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2010, 2011, 2012, 2014 Ingo Schwarze <schwarze@openbsd.org> @@ -284,7 +284,6 @@ main(int argc, char *argv[]) mansearch_setup(1); if( ! mansearch(&search, &paths, argc, argv, &res, &sz)) usage(search.argmode); - manpath_free(&paths); resp = res; if (sz == 0) { @@ -367,9 +366,11 @@ main(int argc, char *argv[]) while (argc) { #if HAVE_SQLITE3 if (resp != NULL) { - if (resp->form) + if (resp->form) { + /* For .so only; ignore failure. */ + chdir(paths.paths[resp->ipath]); parse(&curp, -1, resp->file, &rc); - else + } else rc = passthrough(resp->file); resp++; } else @@ -388,6 +389,7 @@ main(int argc, char *argv[]) #if HAVE_SQLITE3 out: if (search.argmode != ARG_FILE) { + manpath_free(&paths); mansearch_free(res, sz); mansearch_setup(0); } diff --git a/mansearch.c b/mansearch.c index 0ede3e66..a8a37a96 100644 --- a/mansearch.c +++ b/mansearch.c @@ -1,4 +1,4 @@ -/* $Id: mansearch.c,v 1.46 2014/08/21 20:29:07 schwarze Exp $ */ +/* $Id: mansearch.c,v 1.47 2014/09/01 22:45:53 schwarze Exp $ */ /* * Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2013, 2014 Ingo Schwarze <schwarze@openbsd.org> @@ -335,6 +335,7 @@ mansearch(const struct mansearch *search, maxres, sizeof(struct manpage)); } mpage = *res + cur; + mpage->ipath = i; mpage->sec = 10; mpage->form = mp->form; buildnames(mpage, db, s, mp->pageid, diff --git a/mansearch.h b/mansearch.h index 3644310b..6cc6f410 100644 --- a/mansearch.h +++ b/mansearch.h @@ -1,4 +1,4 @@ -/* $Id: mansearch.h,v 1.16 2014/08/17 03:24:47 schwarze Exp $ */ +/* $Id: mansearch.h,v 1.17 2014/09/01 22:45:53 schwarze Exp $ */ /* * Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2013, 2014 Ingo Schwarze <schwarze@openbsd.org> @@ -79,6 +79,7 @@ struct manpage { char *file; /* to be prefixed by manpath */ char *names; /* a list of names with sections */ char *output; /* user-defined additional output */ + size_t ipath; /* number of the manpath */ int sec; /* section number, 10 means invalid */ int form; /* 0 == catpage */ }; |