diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2014-07-24 08:26:57 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2014-07-24 08:26:57 +0000 |
commit | 4d3e662fd848a0d5fbda1bc38e39aeb05d9b34dc (patch) | |
tree | 814238f4a6af9688a0a1dce810fab05ded90ce42 | |
parent | afedb16f6744e0c2bd4d1c5beb39a4f626f6a5d8 (diff) | |
download | mandoc-4d3e662fd848a0d5fbda1bc38e39aeb05d9b34dc.tar.gz |
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@
-rw-r--r-- | cgi.c | 26 |
1 files changed, 25 insertions, 1 deletions
@@ -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; |