aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cgi.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-12-07 15:12:34 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-12-07 15:12:34 +0000
commit6a87ff4ff4ef9677e29e66c085f94f674f18f434 (patch)
tree9e8d2eef8a06e7b15913d2eddea5fdf200327b0a /cgi.c
parent50669b29997f4c41fa76feea0da91b373728f88f (diff)
downloadmandoc-6a87ff4ff4ef9677e29e66c085f94f674f18f434.tar.gz
mandoc-6a87ff4ff4ef9677e29e66c085f94f674f18f434.tar.zst
mandoc-6a87ff4ff4ef9677e29e66c085f94f674f18f434.zip
Accept old-school man.cgi parameters like "sektion" and "query". This still
needs work because specifying an arch with "arch=i386" will return results that don't have an arch specified. I think this is weird, but it will need to be supported if we want backwards compatibility.
Diffstat (limited to 'cgi.c')
-rw-r--r--cgi.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/cgi.c b/cgi.c
index 7585e589..10f4fe23 100644
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-/* $Id: cgi.c,v 1.12 2011/12/07 13:00:40 kristaps Exp $ */
+/* $Id: cgi.c,v 1.13 2011/12/07 15:12:34 kristaps Exp $ */
/*
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -323,11 +323,18 @@ resp_searchform(const struct req *req)
for (i = 0; i < (int)req->fieldsz; i++)
if (0 == strcmp(req->fields[i].key, "expr"))
expr = req->fields[i].val;
+ else if (0 == strcmp(req->fields[i].key, "query"))
+ expr = req->fields[i].val;
else if (0 == strcmp(req->fields[i].key, "sec"))
sec = req->fields[i].val;
+ else if (0 == strcmp(req->fields[i].key, "sektion"))
+ sec = req->fields[i].val;
else if (0 == strcmp(req->fields[i].key, "arch"))
arch = req->fields[i].val;
+ if (NULL != sec && 0 == strcmp(sec, "0"))
+ sec = NULL;
+
puts("<!-- Begin search form. //-->");
printf("<FORM ACTION=\"");
html_print(progname);
@@ -745,14 +752,24 @@ pg_search(const struct manpaths *ps, const struct req *req, char *path)
for (sz = i = 0; i < (int)req->fieldsz; i++)
if (0 == strcmp(req->fields[i].key, "expr"))
ep = req->fields[i].val;
+ else if (0 == strcmp(req->fields[i].key, "query"))
+ ep = req->fields[i].val;
else if (0 == strcmp(req->fields[i].key, "sec"))
opt.cat = req->fields[i].val;
+ else if (0 == strcmp(req->fields[i].key, "sektion"))
+ opt.cat = req->fields[i].val;
else if (0 == strcmp(req->fields[i].key, "arch"))
opt.arch = req->fields[i].val;
+ else if (0 == strcmp(req->fields[i].key, "apropos"))
+ whatis = 0 == strcmp
+ (req->fields[i].val, "0");
else if (0 == strcmp(req->fields[i].key, "op"))
whatis = 0 == strcasecmp
(req->fields[i].val, "whatis");
+ if (NULL != opt.cat && 0 == strcmp(opt.cat, "0"))
+ opt.cat = NULL;
+
/*
* Poor man's tokenisation.
* Just break apart by spaces.