aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cgi.c
diff options
context:
space:
mode:
Diffstat (limited to 'cgi.c')
-rw-r--r--cgi.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/cgi.c b/cgi.c
index 36e069fc..cfce8388 100644
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-/* $Id: cgi.c,v 1.89 2014/07/25 19:37:34 schwarze Exp $ */
+/* $Id: cgi.c,v 1.90 2014/07/25 20:09:09 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014 Ingo Schwarze <schwarze@usta.de>
@@ -851,12 +851,13 @@ static void
format(const struct req *req, const char *file)
{
struct mparse *mp;
- int fd;
struct mdoc *mdoc;
struct man *man;
void *vp;
+ char *opts;
enum mandoclevel rc;
- char opts[PATH_MAX + 128];
+ int fd;
+ int usepath;
if (-1 == (fd = open(file, O_RDONLY, 0))) {
puts("<P>You specified an invalid manual file.</P>");
@@ -875,11 +876,14 @@ format(const struct req *req, const char *file)
return;
}
- snprintf(opts, sizeof(opts), "fragment,man=%s?"
- "manpath=%s&query=%%N&sec=%%S%s%s",
- scriptname, req->q.manpath,
- req->q.arch ? "&arch=" : "",
- req->q.arch ? req->q.arch : "");
+ usepath = strcmp(req->q.manpath, req->p[0]);
+ mandoc_asprintf(&opts,
+ "fragment,man=%s?query=%%N&sec=%%S%s%s%s%s",
+ scriptname,
+ req->q.arch ? "&arch=" : "",
+ req->q.arch ? req->q.arch : "",
+ usepath ? "&manpath=" : "",
+ usepath ? req->q.manpath : "");
mparse_result(mp, &mdoc, &man, NULL);
if (NULL == man && NULL == mdoc) {
@@ -899,6 +903,7 @@ format(const struct req *req, const char *file)
html_free(vp);
mparse_free(mp);
+ free(opts);
}
static void