changeset 938:99688032e2e9

tag: use 'tag'/'cat' directly from query nvlist Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Thu, 07 Sep 2017 18:01:53 +0300
parents 8e77b198735d
children b84bd7693ae5
files req.c req.h tag.c
diffstat 3 files changed, 28 insertions(+), 65 deletions(-) [+]
line wrap: on
line diff
--- a/req.c	Thu Sep 07 17:51:07 2017 +0300
+++ b/req.c	Thu Sep 07 18:01:53 2017 +0300
@@ -249,12 +249,9 @@
 {
 	struct nvlist *query = req->scgi->request.query;
 	struct qs *args = &req->args;
-	const struct nvpair *cur;
 	struct str *uri;
 
 	args->page = PAGE_INDEX;
-	args->cat = NULL;
-	args->tag = NULL;
 
 	uri = nvl_lookup_str(req->scgi->request.headers, SCGI_DOCUMENT_URI);
 	ASSERT(!IS_ERR(uri));
@@ -272,48 +269,13 @@
 			return false;
 	}
 
-	nvl_for_each(cur, query) {
-		const char *name, *val;
-		const char **cptr;
-
-		cptr = NULL;
-
-		name = nvpair_name(cur);
-		val = pair2str(cur);
-
-		if (!strcmp(name, "p")) {
-			continue;
-		} else if (!strcmp(name, "paged")) {
-			continue;
-		} else if (!strcmp(name, "m")) {
-			continue;
-		} else if (!strcmp(name, "cat")) {
-			cptr = &args->cat;
-		} else if (!strcmp(name, "tag")) {
-			cptr = &args->tag;
-		} else if (!strcmp(name, "feed")) {
-			continue;
-		} else if (!strcmp(name, "comment")) {
-			continue;
-		} else if (!strcmp(name, "preview")) {
-			continue;
-		} else if (!strcmp(name, "admin")) {
-			continue;
-		} else {
-			return false;
-		}
-
-		if (cptr)
-			*cptr = val;
-	}
-
 	(void) nvl_convert(query, info, true);
 
 	if (nvl_exists(query, "comment"))
 		args->page = PAGE_COMMENT;
-	else if (args->tag)
+	else if (nvl_exists(query, "tag"))
 		args->page = PAGE_TAG;
-	else if (args->cat)
+	else if (nvl_exists(query, "cat"))
 		args->page = PAGE_CATEGORY;
 	else if (nvl_exists(query, "m"))
 		args->page = PAGE_ARCHIVE;
@@ -430,11 +392,9 @@
 		case PAGE_ARCHIVE:
 			return blahg_archive(req, get_page_number(req));
 		case PAGE_CATEGORY:
-			return blahg_category(req, req->args.cat,
-					      get_page_number(req));
+			return blahg_category(req, get_page_number(req));
 		case PAGE_TAG:
-			return blahg_tag(req, req->args.tag,
-					 get_page_number(req));
+			return blahg_tag(req, get_page_number(req));
 		case PAGE_COMMENT:
 			return blahg_comment(req);
 		case PAGE_INDEX:
--- a/req.h	Thu Sep 07 17:51:07 2017 +0300
+++ b/req.h	Thu Sep 07 18:01:53 2017 +0300
@@ -43,9 +43,6 @@
 
 struct qs {
 	int page;
-
-	const char *cat;
-	const char *tag;
 };
 
 struct req {
@@ -74,8 +71,8 @@
 extern int R301(struct req *req, const char *url);
 
 extern int blahg_archive(struct req *req, int paged);
-extern int blahg_category(struct req *req, const char *cat, int page);
-extern int blahg_tag(struct req *req, const char *tag, int paged);
+extern int blahg_category(struct req *req, int page);
+extern int blahg_tag(struct req *req, int paged);
 extern int blahg_comment(struct req *req);
 extern int blahg_index(struct req *req, int paged);
 extern int blahg_story(struct req *req);
--- a/tag.c	Thu Sep 07 17:51:07 2017 +0300
+++ b/tag.c	Thu Sep 07 18:01:53 2017 +0300
@@ -47,19 +47,20 @@
  */
 static struct str **wordpress_cats;
 
-static void __store_title(struct vars *vars, const char *title)
+static void __store_title(struct vars *vars, struct str *title)
 {
 	char twittertitle[1024];
 
-	snprintf(twittertitle, sizeof(twittertitle), "%s » %s", "Blahg", title);
+	snprintf(twittertitle, sizeof(twittertitle), "%s » %s", "Blahg",
+		 str_cstr(title));
 
-	vars_set_str(vars, "title", STR_DUP(title));
+	vars_set_str(vars, "title", title);
 	vars_set_str(vars, "twittertitle", STR_DUP(twittertitle));
 }
 
-static void __store_tag(struct vars *vars, const char *tag)
+static void __store_tag(struct vars *vars, struct str *tag)
 {
-	vars_set_str(vars, "tagid", STR_DUP(tag));
+	vars_set_str(vars, "tagid", tag);
 }
 
 static void __store_pages(struct vars *vars, int page)
@@ -69,24 +70,21 @@
 	vars_set_int(vars, "nextpage", page - 1);
 }
 
-int __tagcat(struct req *req, const char *tagcat, int page, char *tmpl,
+int __tagcat(struct req *req, struct str *tag, int page, char *tmpl,
 	     bool istag)
 {
 	const unsigned int posts_per_page = req->opts.index_stories;
 	struct post *posts[posts_per_page];
-	struct str *tag;
 	int nposts;
 
-	if (!tagcat)
+	if (IS_ERR(tag))
 		return R404(req, NULL);
 
-	tag = STR_DUP(tagcat);
-
 	req_head(req, "Content-Type", "text/html");
 
-	__store_title(&req->vars, tagcat);
+	__store_title(&req->vars, str_getref(tag));
 	__store_pages(&req->vars, page);
-	__store_tag(&req->vars, tagcat);
+	__store_tag(&req->vars, str_getref(tag));
 
 	sidebar(req);
 
@@ -104,21 +102,27 @@
 	return 0;
 }
 
-int blahg_tag(struct req *req, const char *tag, int page)
+int blahg_tag(struct req *req, int page)
 {
-	return __tagcat(req, tag, page, "{tagindex}", true);
+	return __tagcat(req, nvl_lookup_str(req->scgi->request.query, "tag"),
+			page, "{tagindex}", true);
 }
 
-int blahg_category(struct req *req, const char *cat, int page)
+int blahg_category(struct req *req, int page)
 {
+	struct str *cat;
 	uint32_t catn;
 
+	cat = nvl_lookup_str(req->scgi->request.query, "cat");
+	if (IS_ERR(cat))
+		goto out;
+
 	/*
 	 * If we fail to parse the category number or it refers to a
 	 * non-mapped category, we just use it as is.
 	 */
 
-	if (wordpress_cats && !str2u32(cat, &catn)) {
+	if (wordpress_cats && !str2u32(str_cstr(cat), &catn)) {
 		char url[256];
 
 		if (catn >= array_size(wordpress_cats))
@@ -127,6 +131,8 @@
 		if (!wordpress_cats[catn])
 			goto out;
 
+		str_putref(cat);
+
 		snprintf(url, sizeof(url), "%s/?cat=%s",
 			 str_cstr(config.base_url),
 			 str_cstr(wordpress_cats[catn]));