summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-07-25 20:09:09 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-07-25 20:09:09 +0000
commitafcd27ddb8004f570d599770cc9362d287155082 (patch)
tree010d1d91c230b4777687ae9b621358ce609b7cce
parent41d963282eebdbc3224f4cacea8af0675fe603d9 (diff)
downloadmandoc-afcd27ddb8004f570d599770cc9362d287155082.tar.gz
Sort the URI keys for .Xr links in the same order used by the search form,
and leave out the manpath when it is the default. For building the HTML formatter options, do not use a static buffer.
-rw-r--r--cgi.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/cgi.c b/cgi.c
index f3f25204..da1e1f57 100644
--- a/cgi.c
+++ b/cgi.c
@@ -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