fix a minibug reported by kristaps@:
authorschwarze <schwarze@openbsd.org>
Mon, 21 Jul 2014 22:32:55 +0000 (22:32 +0000)
committerschwarze <schwarze@openbsd.org>
Mon, 21 Jul 2014 22:32:55 +0000 (22:32 +0000)
preserve manpath and arch in .Xr links

usr.bin/mandoc/cgi.c

index ea00f9c..dbe73e5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: cgi.c,v 1.18 2014/07/21 15:44:22 schwarze Exp $ */
+/*     $Id: cgi.c,v 1.19 2014/07/21 22:32:55 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014 Ingo Schwarze <schwarze@usta.de>
@@ -67,7 +67,7 @@ static        void             pg_noresult(const struct req *, const char *);
 static void             pg_search(const struct req *);
 static void             pg_searchres(const struct req *,
                                struct manpage *, size_t);
-static void             pg_show(const struct req *, const char *);
+static void             pg_show(struct req *, const char *);
 static void             resp_begin_html(int, const char *);
 static void             resp_begin_http(int, const char *);
 static void             resp_end_html(void);
@@ -781,9 +781,10 @@ format(const struct req *req, const char *file)
                return;
        }
 
-       snprintf(opts, sizeof(opts),
-           "fragment,man=%s?query=%%N&amp;sec=%%S",
-           scriptname);
+       snprintf(opts, sizeof(opts), "fragment,man=%s?"
+           "manpath=%s&amp;query=%%N&amp;sec=%%S&amp;arch=%s",
+           scriptname, req->q.manpath,
+           req->q.arch ? req->q.arch : "");
 
        mparse_result(mp, &mdoc, &man, NULL);
        if (NULL == man && NULL == mdoc) {
@@ -819,7 +820,7 @@ resp_show(const struct req *req, const char *file)
 }
 
 static void
-pg_show(const struct req *req, const char *path)
+pg_show(struct req *req, const char *path)
 {
        char            *sub;
 
@@ -855,6 +856,9 @@ pg_show(const struct req *req, const char *path)
                return;
        }
 
+       if (strcmp(path, "mandoc"))
+               req->q.manpath = path;
+
        resp_begin_html(200, NULL);
        resp_searchform(req);
        resp_show(req, sub);