source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Simplify: Delete 74 lines of code including one enum type, one
@ 2014-07-12 17:21 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2014-07-12 17:21 UTC (permalink / raw)
  To: source

Log Message:
-----------
Simplify: Delete 74 lines of code including one enum type, one
global lookup table, two functions, two function arguments, one
struct member, one local variable, and the "search/" and "show/"
part of the URIs, all without losing functionality.

Modified Files:
--------------
    mdocml:
        cgi.c

Revision Data
-------------
Index: cgi.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/cgi.c,v
retrieving revision 1.65
retrieving revision 1.66
diff -Lcgi.c -Lcgi.c -u -p -r1.65 -r1.66
--- cgi.c
+++ cgi.c
@@ -34,13 +34,6 @@
 #include "manpath.h"
 #include "mansearch.h"
 
-enum	page {
-	PAGE_INDEX,
-	PAGE_SEARCH,
-	PAGE_SHOW,
-	PAGE__MAX
-};
-
 /*
  * A query as passed to the search function.
  */
@@ -56,7 +49,6 @@ struct	req {
 	struct query	  q;
 	char		**p; /* array of available manpaths */
 	size_t		  psz; /* number of available manpaths */
-	enum page	  page;
 };
 
 static	void		 catman(const struct req *, const char *);
@@ -71,15 +63,13 @@ static	void		 http_print(const char *);
 static	void 		 http_putchar(char);
 static	void		 http_printquery(const struct req *);
 static	void		 pathgen(struct req *);
-static	void		 pg_index(const struct req *, char *);
-static	void		 pg_search(const struct req *, char *);
-static	void		 pg_show(const struct req *, char *);
+static	void		 pg_search(const struct req *);
+static	void		 pg_show(const struct req *, const char *);
 static	void		 resp_begin_html(int, const char *);
 static	void		 resp_begin_http(int, const char *);
 static	void		 resp_end_html(void);
 static	void		 resp_error_badrequest(const char *);
 static	void		 resp_error_internal(void);
-static	void		 resp_error_notfound(const char *);
 static	void		 resp_index(const struct req *);
 static	void		 resp_noresult(const struct req *,
 				const char *);
@@ -92,12 +82,6 @@ static	const char	 *mandir; /* contains 
 static	const char	 *cssdir; /* css directory */
 static	const char	 *httphost; /* hostname used in the URIs */
 
-static	const char * const pages[PAGE__MAX] = {
-	"index", /* PAGE_INDEX */ 
-	"search", /* PAGE_SEARCH */
-	"show", /* PAGE_SHOW */
-};
-
 /*
  * Print a character, escaping HTML along the way.
  * This will pass non-ASCII straight to output: be warned!
@@ -352,7 +336,7 @@ resp_searchform(const struct req *req)
 
 	puts("<!-- Begin search form. //-->");
 	printf("<DIV ID=\"mancgi\">\n"
-	       "<FORM ACTION=\"%s/search\" METHOD=\"get\">\n"
+	       "<FORM ACTION=\"%s\" METHOD=\"get\">\n"
 	       "<FIELDSET>\n"
 	       "<LEGEND>Search Parameters</LEGEND>\n"
 	       "<INPUT TYPE=\"submit\" VALUE=\"Search\"> "
@@ -414,9 +398,9 @@ resp_index(const struct req *req)
 	resp_searchform(req);
 	printf("<P>\n"
 	       "This web interface is documented in the "
-	       "<A HREF=\"%s/search?expr=Nm~^man\\.cgi$&amp;sec=8\">"
+	       "<A HREF=\"%s?query=man.cgi&amp;sec=8\">"
 	       "man.cgi</A> manual, and the "
-	       "<A HREF=\"%s/search?expr=Nm~^apropos$&amp;sec=1\">"
+	       "<A HREF=\"%s?query=apropos&amp;sec=1\">"
 	       "apropos</A> manual explains the query syntax.\n"
 	       "</P>\n",
 	       scriptname, scriptname);
@@ -449,24 +433,6 @@ resp_error_badrequest(const char *msg)
 }
 
 static void
-resp_error_notfound(const char *page)
-{
-
-	resp_begin_html(404, "Not Found");
-	puts("<H1>Page Not Found</H1>\n"
-	     "<P>\n"
-	     "The page you're looking for, ");
-	printf("<B>");
-	html_print(page);
-	printf("</B>,\n"
-	       "could not be found.\n"
-	       "Try searching from the\n"
-	       "<A HREF=\"%s\">main page</A>.\n"
-	       "</P>", scriptname);
-	resp_end_html();
-}
-
-static void
 resp_error_internal(void)
 {
 	resp_begin_html(500, "Internal Server Error");
@@ -485,7 +451,7 @@ resp_search(const struct req *req, struc
 		 * without any delay.
 		 */
 		printf("Status: 303 See Other\r\n");
-		printf("Location: http://%s%s/show/%s/%s?",
+		printf("Location: http://%s%s/%s/%s?",
 		    httphost, scriptname, req->q.manpath, r[0].file);
 		http_printquery(req);
 		printf("\r\n"
@@ -504,7 +470,7 @@ resp_search(const struct req *req, struc
 	for (i = 0; i < sz; i++) {
 		printf("<TR>\n"
 		       "<TD CLASS=\"title\">\n"
-		       "<A HREF=\"%s/show/%s/%s?", 
+		       "<A HREF=\"%s/%s/%s?", 
 		    scriptname, req->q.manpath, r[i].file);
 		html_printquery(req);
 		printf("\">");
@@ -522,14 +488,6 @@ resp_search(const struct req *req, struc
 	resp_end_html();
 }
 
-/* ARGSUSED */
-static void
-pg_index(const struct req *req, char *path)
-{
-
-	resp_index(req);
-}
-
 static void
 catman(const struct req *req, const char *file)
 {
@@ -697,7 +655,7 @@ format(const struct req *req, const char
 	}
 
 	snprintf(opts, sizeof(opts),
-	    "fragment,man=%s/search?sec=%%S&expr=Nm~^%%N$",
+	    "fragment,man=%s?query=%%N&amp;sec=%%S",
 	    scriptname);
 
 	mparse_result(mp, &mdoc, &man, NULL);
@@ -727,7 +685,7 @@ format(const struct req *req, const char
 }
 
 static void
-pg_show(const struct req *req, char *path)
+pg_show(const struct req *req, const char *path)
 {
 	char		*sub;
 
@@ -757,7 +715,7 @@ pg_show(const struct req *req, char *pat
 }
 
 static void
-pg_search(const struct req *req, char *path)
+pg_search(const struct req *req)
 {
 	struct mansearch	  search;
 	struct manpaths		  paths;
@@ -836,9 +794,10 @@ pg_search(const struct req *req, char *p
 int
 main(void)
 {
-	int		 i;
 	struct req	 req;
-	char		*querystring, *path, *subpath;
+	const char	*path;
+	char		*querystring;
+	int		 i;
 
 	/* Scan our run-time environment. */
 
@@ -875,52 +834,20 @@ main(void)
 	if (NULL != (querystring = getenv("QUERY_STRING")))
 		http_parse(&req, querystring);
 
-	/*
-	 * Now juggle paths to extract information.
-	 * We want to extract our filetype (the file suffix), the
-	 * initial path component, then the trailing component(s).
-	 * Start with leading subpath component. 
-	 */
-
-	subpath = path = NULL;
-	req.page = PAGE__MAX;
-
-	if (NULL == (path = getenv("PATH_INFO")) || '\0' == *path)
-		req.page = PAGE_INDEX;
-
-	if (NULL != path && '/' == *path && '\0' == *++path)
-		req.page = PAGE_INDEX;
-
-	/* Resolve subpath component. */
-
-	if (NULL != path && NULL != (subpath = strchr(path, '/')))
-		*subpath++ = '\0';
-
-	/* Map path into one we recognise. */
-
-	if (NULL != path && '\0' != *path)
-		for (i = 0; i < (int)PAGE__MAX; i++) 
-			if (0 == strcmp(pages[i], path)) {
-				req.page = (enum page)i;
-				break;
-			}
-
-	/* Route pages. */
+	/* Dispatch to the three different pages. */
 
-	switch (req.page) {
-	case (PAGE_INDEX):
-		pg_index(&req, subpath);
-		break;
-	case (PAGE_SEARCH):
-		pg_search(&req, subpath);
-		break;
-	case (PAGE_SHOW):
-		pg_show(&req, subpath);
-		break;
-	default:
-		resp_error_notfound(path);
-		break;
-	}
+	path = getenv("PATH_INFO");
+	if (NULL == path)
+		path = "";
+	else if ('/' == *path)
+		path++;
+
+	if ('\0' != *path)
+		pg_show(&req, path);
+	else if (NULL != req.q.expr)
+		pg_search(&req);
+	else
+		resp_index(&req);
 
 	for (i = 0; i < (int)req.psz; i++)
 		free(req.p[i]);
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2014-07-12 17:21 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-12 17:21 mdocml: Simplify: Delete 74 lines of code including one enum type, one schwarze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).