aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cgi.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-07-24 08:26:57 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-07-24 08:26:57 +0000
commit896b390bda7935b1fbc5244e7655b49a2a089bf5 (patch)
tree03205e23110a09061f050264374176e2ccf64b56 /cgi.c
parent21df9e140855080c5ff9542bd1bcb8cd1d9953a5 (diff)
downloadmandoc-896b390bda7935b1fbc5244e7655b49a2a089bf5.tar.gz
mandoc-896b390bda7935b1fbc5244e7655b49a2a089bf5.tar.zst
mandoc-896b390bda7935b1fbc5244e7655b49a2a089bf5.zip
Provide a dropdown entry "All Architectures" and make it the default.
Still, amd64 remains the default in the following sense: If a man(1) mode search returns more than one page of the same name, prefer amd64 over other architectures for immediate display. ok deraadt@ daniel@
Diffstat (limited to 'cgi.c')
-rw-r--r--cgi.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/cgi.c b/cgi.c
index 0b3ac814..e505b928 100644
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-/* $Id: cgi.c,v 1.80 2014/07/22 18:14:13 schwarze Exp $ */
+/* $Id: cgi.c,v 1.81 2014/07/24 08:26:57 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014 Ingo Schwarze <schwarze@usta.de>
@@ -422,7 +422,11 @@ resp_searchform(const struct req *req)
/* Write architecture selector. */
- puts("<SELECT NAME=\"arch\">");
+ printf( "<SELECT NAME=\"arch\">\n"
+ "<OPTION VALUE=\"default\"");
+ if (NULL == req->q.arch)
+ printf(" SELECTED");
+ puts(">All Architectures</OPTION>");
for (i = 0; i < arch_MAX; i++) {
printf("<OPTION VALUE=\"%s\"", arch_names[i]);
if (NULL != req->q.arch &&
@@ -559,7 +563,9 @@ pg_error_internal(void)
static void
pg_searchres(const struct req *req, struct manpage *r, size_t sz)
{
+ char *arch, *archend;
size_t i, iuse, isec;
+ int archprio, archpriouse;
int prio, priouse;
char sec;
@@ -622,12 +628,30 @@ pg_searchres(const struct req *req, struct manpage *r, size_t sz)
puts("<HR>");
iuse = 0;
priouse = 10;
+ archpriouse = 3;
for (i = 0; i < sz; i++) {
isec = strcspn(r[i].file, "123456789");
sec = r[i].file[isec];
if ('\0' == sec)
continue;
prio = sec_prios[sec - '1'];
+ if (NULL == req->q.arch) {
+ archprio =
+ (NULL == (arch = strchr(
+ r[i].file + isec, '/'))) ? 3 :
+ (NULL == (archend = strchr(
+ arch + 1, '/'))) ? 0 :
+ strncmp(arch, "amd64/",
+ archend - arch) ? 2 : 1;
+ if (archprio < archpriouse) {
+ archpriouse = archprio;
+ priouse = prio;
+ iuse = i;
+ continue;
+ }
+ if (archprio > archpriouse)
+ continue;
+ }
if (prio >= priouse)
continue;
priouse = prio;