=================================================================== RCS file: /cvs/mandoc/cgi.c,v retrieving revision 1.121 retrieving revision 1.126 diff -u -p -r1.121 -r1.126 --- mandoc/cgi.c 2016/04/14 20:40:33 1.121 +++ mandoc/cgi.c 2016/04/15 01:34:51 1.126 @@ -1,4 +1,4 @@ -/* $Id: cgi.c,v 1.121 2016/04/14 20:40:33 schwarze Exp $ */ +/* $Id: cgi.c,v 1.126 2016/04/15 01:34:51 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2016 Ingo Schwarze @@ -108,16 +108,16 @@ static const int sec_MAX = sizeof(sec_names) / sizeof( static const char *const arch_names[] = { "amd64", "alpha", "armish", "armv7", - "aviion", "hppa", "hppa64", "i386", - "ia64", "landisk", "loongson", "luna88k", - "macppc", "mips64", "octeon", "sgi", - "socppc", "solbourne", "sparc", "sparc64", - "vax", "zaurus", + "hppa", "hppa64", "i386", "landisk", + "loongson", "luna88k", "macppc", "mips64", + "octeon", "sgi", "socppc", "sparc", + "sparc64", "zaurus", "amiga", "arc", "arm32", "atari", - "beagle", "cats", "hp300", "mac68k", - "mvme68k", "mvme88k", "mvmeppc", "palm", - "pc532", "pegasos", "pmax", "powerpc", - "sun3", "wgrisc", "x68k" + "aviion", "beagle", "cats", "hp300", + "ia64", "mac68k", "mvme68k", "mvme88k", + "mvmeppc", "palm", "pc532", "pegasos", + "pmax", "powerpc", "solbourne", "sun3", + "vax", "wgrisc", "x68k" }; static const int arch_MAX = sizeof(arch_names) / sizeof(char *); @@ -341,14 +341,14 @@ resp_begin_html(int code, const char *msg) resp_begin_http(code, msg); printf("\n" - "\n" - "\n" - "\n" - "\n" - "%s\n" - "\n" - "\n" + "\n" + "\n" + "\n" + "\n" + "%s\n" + "\n" + "\n" "\n", CSS_DIR, CUSTOMIZE_TITLE); @@ -361,8 +361,8 @@ resp_end_html(void) resp_copy(MAN_DIR "/footer.html"); - puts("\n" - ""); + puts("\n" + ""); } static void @@ -371,93 +371,93 @@ resp_searchform(const struct req *req) int i; puts(""); - printf("
\n" - "
\n" - "
\n" - "Manual Page Search Parameters\n", + printf("
\n" + "\n" + "
\n" + "Manual Page Search Parameters\n", scriptname); /* Write query input box. */ - printf( "
\n" - "
\n" + "q.query) html_print(req->q.query); - puts("\" SIZE=\"40\">"); + puts("\" size=\"40\">"); /* Write submission and reset buttons. */ - printf( "\n" - "\n"); + printf( "\n" + "\n"); /* Write show radio button */ - printf( "\n" - "\n" + "q.equal) - printf("CHECKED=\"checked\" "); - printf( "NAME=\"apropos\" ID=\"show\" VALUE=\"0\">\n" - "\n"); + printf("checked=\"checked\" "); + printf( "name=\"apropos\" id=\"show\" value=\"0\">\n" + "\n"); /* Write section selector. */ - puts( "
\n" - "
\n" + ""); + puts(""); /* Write architecture selector. */ - printf( ""); + puts(""); /* Write manpath selector. */ if (req->psz > 1) { - puts(""); for (i = 0; i < (int)req->psz; i++) { - printf(""); + puts(""); } - puts(""); + puts(""); } /* Write search radio button */ - printf( "\n" - "\n" + "q.equal) - printf("CHECKED=\"checked\" "); - printf( "NAME=\"apropos\" ID=\"search\" VALUE=\"1\">\n" - "\n"); + printf("checked=\"checked\" "); + printf( "name=\"apropos\" id=\"search\" value=\"1\">\n" + "\n"); - puts("
\n" - "
\n" - "\n" - "
"); + puts("\n" + "
\n" + "\n" + "
"); puts(""); } @@ -507,13 +507,13 @@ pg_index(const struct req *req) resp_begin_html(200, NULL); resp_searchform(req); - printf("

\n" + printf("

\n" "This web interface is documented in the\n" - "man.cgi\n" + "man.cgi\n" "manual, and the\n" - "apropos\n" + "apropos\n" "manual explains the query syntax.\n" - "

\n", + "

\n", scriptname, *scriptname == '\0' ? "" : "/", scriptname, *scriptname == '\0' ? "" : "/"); resp_end_html(); @@ -524,9 +524,9 @@ pg_noresult(const struct req *req, const char *msg) { resp_begin_html(200, NULL); resp_searchform(req); - puts("

"); + puts("

"); puts(msg); - puts("

"); + puts("

"); resp_end_html(); } @@ -535,12 +535,12 @@ pg_error_badrequest(const char *msg) { resp_begin_html(400, "Bad Request"); - puts("

Bad Request

\n" - "

\n"); + puts("

Bad Request

\n" + "

\n"); puts(msg); printf("Try again from the\n" - "main page.\n" - "

", scriptname); + "main page.\n" + "

", scriptname); resp_end_html(); } @@ -548,7 +548,7 @@ static void pg_error_internal(void) { resp_begin_html(500, "Internal Server Error"); - puts("

Internal Server Error

"); + puts("

Internal Server Error

"); resp_end_html(); } @@ -588,35 +588,38 @@ pg_searchres(const struct req *req, struct manpage *r, resp_begin_html(200, NULL); resp_searchform(req); - puts("
"); - puts(""); - for (i = 0; i < sz; i++) { - printf("\n" - "\n" - "\n" - ""); - } + if (sz > 1) { + puts("
"); + puts("
\n" - "q.manpath, r[i].file); - printf("\">"); - html_print(r[i].names); - printf("\n" - ""); - html_print(r[i].output); - puts("
"); - puts("
\n" - "
"); + for (i = 0; i < sz; i++) { + printf("\n" + "\n" + "q.manpath, r[i].file); + printf("\">"); + html_print(r[i].names); + printf("\n" + "\n" + ""); + html_print(r[i].output); + puts("\n" + ""); + } + puts("\n" + ""); + } + /* * In man(1) mode, show one of the pages * even if more than one is found. */ - if (req->q.equal) { - puts("
"); + if (req->q.equal || sz == 1) { + puts("
"); iuse = 0; priouse = 20; archpriouse = 3; @@ -667,12 +670,12 @@ catman(const struct req *req, const char *file) int italic, bold; if ((f = fopen(file, "r")) == NULL) { - puts("

You specified an invalid manual file.

"); + puts("

You specified an invalid manual file.

"); return; } - puts("
\n" - "
");
+	puts("
\n" + "
");
 
 	p = NULL;
 	sz = 0;
@@ -698,9 +701,9 @@ catman(const struct req *req, const char *file)
 
 			if ('\b' != p[i + 1]) {
 				if (italic)
-					printf("");
+					printf("");
 				if (bold)
-					printf("");
+					printf("");
 				italic = bold = 0;
 				html_putchar(p[i]);
 				continue;
@@ -711,9 +714,9 @@ catman(const struct req *req, const char *file)
 
 			if ('_' == p[i]) {
 				if (bold)
-					printf("");
+					printf("");
 				if ( ! italic)
-					printf("");
+					printf("");
 				bold = 0;
 				italic = 1;
 				i += 2;
@@ -735,9 +738,9 @@ catman(const struct req *req, const char *file)
 					('*' == p[i] && '|' == p[i + 2]) ||
 					('|' == p[i] && '*' == p[i + 2]))  {
 				if (italic)
-					printf("");
+					printf("");
 				if (bold)
-					printf("");
+					printf("");
 				italic = bold = 0;
 				putchar('*');
 				i += 2;
@@ -749,9 +752,9 @@ catman(const struct req *req, const char *file)
 					('+' == p[i] && '|' == p[i + 1]) ||
 					('|' == p[i] && '+' == p[i + 1]))  {
 				if (italic)
-					printf("");
+					printf("");
 				if (bold)
-					printf("");
+					printf("");
 				italic = bold = 0;
 				putchar('+');
 				i += 2;
@@ -761,9 +764,9 @@ catman(const struct req *req, const char *file)
 			/* Bold mode. */
 
 			if (italic)
-				printf("");
+				printf("");
 			if ( ! bold)
-				printf("");
+				printf("");
 			bold = 1;
 			italic = 0;
 			i += 2;
@@ -776,9 +779,9 @@ catman(const struct req *req, const char *file)
 		 */
 
 		if (italic)
-			printf("");
+			printf("");
 		if (bold)
-			printf("");
+			printf("");
 
 		if (i == len - 1 && p[i] != '\n')
 			html_putchar(p[i]);
@@ -787,8 +790,8 @@ catman(const struct req *req, const char *file)
 	}
 	free(p);
 
-	puts("
\n" - "
"); + puts("
\n" + "
"); fclose(f); } @@ -804,7 +807,7 @@ format(const struct req *req, const char *file) int usepath; if (-1 == (fd = open(file, O_RDONLY, 0))) { - puts("

You specified an invalid manual file.

"); + puts("

You specified an invalid manual file.

"); return; } @@ -816,12 +819,8 @@ format(const struct req *req, const char *file) memset(&conf, 0, sizeof(conf)); conf.fragment = 1; usepath = strcmp(req->q.manpath, req->p[0]); - mandoc_asprintf(&conf.man, "/%s?query=%%N&sec=%%S%s%s%s%s", - scriptname, - req->q.arch ? "&arch=" : "", - req->q.arch ? req->q.arch : "", - usepath ? "&manpath=" : "", - usepath ? req->q.manpath : ""); + mandoc_asprintf(&conf.man, "/%s%s%%N.%%S", + usepath ? req->q.manpath : "", usepath ? "/" : ""); mparse_result(mp, &man, NULL); if (man == NULL) { @@ -1038,9 +1037,10 @@ main(void) else if (*path == '/') path++; - if (*path != '\0' && access(path, F_OK) == -1) { + if (*path != '\0') { path_parse(&req, path); - path = ""; + if (access(path, F_OK) == -1) + path = ""; } else if ((querystring = getenv("QUERY_STRING")) != NULL) http_parse(&req, querystring);