=================================================================== RCS file: /cvs/mandoc/cgi.c,v retrieving revision 1.17 retrieving revision 1.19 diff -u -p -r1.17 -r1.19 --- mandoc/cgi.c 2011/12/08 00:48:28 1.17 +++ mandoc/cgi.c 2011/12/08 22:47:09 1.19 @@ -1,4 +1,4 @@ -/* $Id: cgi.c,v 1.17 2011/12/08 00:48:28 kristaps Exp $ */ +/* $Id: cgi.c,v 1.19 2011/12/08 22:47:09 kristaps Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * @@ -424,8 +424,13 @@ 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) { /* * If we have just one result, then jump there now @@ -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("

No results found.

"); + puts("

\n" + "No results found."); + if (whatis) { + printf("(Try apropos?)"); + } + puts("

"); resp_end_html(); return; } @@ -731,7 +769,7 @@ pg_show(const struct manpaths *ps, const struct req *r resp_baddb(); else { strlcpy(file, cache, MAXPATHLEN); - strlcpy(file, "/", MAXPATHLEN); + strlcat(file, "/", MAXPATHLEN); strlcat(file, fn, MAXPATHLEN); if (0 == strcmp(cp, "cat")) catman(file);