aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cgi.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-12-08 22:47:09 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-12-08 22:47:09 +0000
commit2671d8b5f928661e34f3b3a25984aa41fadeef1c (patch)
tree9dae40008c0b43c84d9fb2b41cc97b95a778609e /cgi.c
parentb55088d2650816fbc4f97b8e19abeab61e1fa119 (diff)
downloadmandoc-2671d8b5f928661e34f3b3a25984aa41fadeef1c.tar.gz
mandoc-2671d8b5f928661e34f3b3a25984aa41fadeef1c.tar.zst
mandoc-2671d8b5f928661e34f3b3a25984aa41fadeef1c.zip
If no man.cgi `whatis' results are found, offer a quick link to the apropos
query mode.
Diffstat (limited to 'cgi.c')
-rw-r--r--cgi.c46
1 files changed, 42 insertions, 4 deletions
diff --git a/cgi.c b/cgi.c
index 38e821ab..755318b9 100644
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-/* $Id: cgi.c,v 1.18 2011/12/08 18:39:14 kristaps Exp $ */
+/* $Id: cgi.c,v 1.19 2011/12/08 22:47:09 kristaps Exp $ */
/*
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -424,7 +424,12 @@ resp_baddb(void)
static void
resp_search(struct res *r, size_t sz, void *arg)
{
- int i;
+ int i, whatis;
+ const char *ep, *sec, *arch;
+ const struct req *req;
+
+ whatis = 1;
+ ep = sec = arch = NULL;
if (1 == sz) {
/*
@@ -439,13 +444,46 @@ resp_search(struct res *r, size_t sz, void *arg)
return;
}
+ req = (const struct req *)arg;
+
+ for (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"))
+ 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;
+ 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");
+
qsort(r, sz, sizeof(struct res), cmp);
resp_begin_html(200, NULL);
- resp_searchform((const struct req *)arg);
+ resp_searchform(req);
if (0 == sz) {
- puts("<P>No results found.</P>");
+ puts("<P>\n"
+ "No results found.");
+ if (whatis) {
+ printf("(Try <A HREF=\"");
+ html_print(progname);
+ printf("/search.html?op=apropos&amp;expr=");
+ html_print(ep ? ep : "");
+ printf("&amp;sec=");
+ html_print(sec ? sec : "");
+ printf("&amp;arch=");
+ html_print(arch ? arch : "");
+ puts("\">apropos</A>?)");
+ }
+ puts("</P>");
resp_end_html();
return;
}