aboutsummaryrefslogtreecommitdiffstatshomepage
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
commitf5d413e221cddb98e1425f70917934bb8cca9514 (patch)
tree10aad2c01824ebda4cc8fe47fb97ed8e1fd31bcf
parent0640e1fe50bd5000c3c9c58b0db1009689f751f7 (diff)
downloadmandoc-f5d413e221cddb98e1425f70917934bb8cca9514.tar.gz
mandoc-f5d413e221cddb98e1425f70917934bb8cca9514.tar.zst
mandoc-f5d413e221cddb98e1425f70917934bb8cca9514.zip
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.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