aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-09-01 22:45:53 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-09-01 22:45:53 +0000
commit3c042f1c04abf0fec8866a305452f7fd2ac8639c (patch)
treea70710051aa68570973231dbad3e5af7771599a2
parentbaf73424c69a2aa19a4dbd317ca8b72d21c33c1b (diff)
downloadmandoc-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.c10
-rw-r--r--mansearch.c3
-rw-r--r--mansearch.h3
3 files changed, 10 insertions, 6 deletions
diff --git a/main.c b/main.c
index 9b1f982e..a6d5013b 100644
--- a/main.c
+++ b/main.c
@@ -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 */
};