Mercurial > blahgd
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]));