aboutsummaryrefslogtreecommitdiff
path: root/page.c
diff options
context:
space:
mode:
Diffstat (limited to 'page.c')
-rw-r--r--page.c74
1 files changed, 72 insertions, 2 deletions
diff --git a/page.c b/page.c
index 6093d7f..32cc071 100644
--- a/page.c
+++ b/page.c
@@ -1766,6 +1766,76 @@ static int add_search_results(struct html_node *const n,
return 0;
}
+static int prepare_search_limit_exceeded(struct html_node *const n,
+ const struct page_search *const s)
+{
+ static const char msg[] = "Too many results were found. Please "
+ "set up a more specific search term in order to provide "
+ "fewer and more relevant results";
+ struct html_node *const p = html_node_add_child(n, "p");
+
+ if (!p)
+ {
+ fprintf(stderr, "%s: html_node_add_child p failed\n", __func__);
+ return -1;
+ }
+ else if (html_node_set_value(p, msg))
+ {
+ fprintf(stderr, "%s: html_node_set_value failed\n", __func__);
+ return -1;
+ }
+
+ return 0;
+}
+
+static int prepare_search_result_count(struct html_node *const n,
+ const struct page_search *const s)
+{
+ int ret = -1;
+ struct html_node *const p = html_node_add_child(n, "p");
+ struct dynstr d;
+
+ dynstr_init(&d);
+
+ if (!p)
+ {
+ fprintf(stderr, "%s: html_node_add_child p failed\n", __func__);
+ goto end;
+ }
+ else if (s->limit_exceeded && prepare_search_limit_exceeded(n, s))
+ {
+ fprintf(stderr, "%s: prepare_search_limit_exceeded msg failed\n",
+ __func__);
+ goto end;
+ }
+ else if (!s->n && html_node_set_value(p, "No results found"))
+ {
+ fprintf(stderr, "%s: html_node_set_value msg failed\n", __func__);
+ goto end;
+ }
+ else if (s->n)
+ {
+ const char *const results = s->n == 1 ? "result" : "results";
+
+ if (dynstr_append(&d, "%zu %s found", s->n, results))
+ {
+ fprintf(stderr, "%s: dynstr_append failed\n", __func__);
+ goto end;
+ }
+ else if (html_node_set_value(p, d.str))
+ {
+ fprintf(stderr, "%s: html_node_set_value p failed\n", __func__);
+ goto end;
+ }
+ }
+
+ ret = 0;
+
+end:
+ dynstr_free(&d);
+ return ret;
+}
+
int page_search(struct http_response *const r,
const struct page_search *const s)
{
@@ -1800,9 +1870,9 @@ int page_search(struct http_response *const r,
fprintf(stderr, "%s: add_search_results failed\n", __func__);
goto end;
}
- else if (!s->n && html_node_set_value(body, "No results found"))
+ else if (prepare_search_result_count(body, s))
{
- fprintf(stderr, "%s: html_node_set_value msg failed\n", __func__);
+ fprintf(stderr, "%s: prepare_limit_exceeded failed\n", __func__);
goto end;
}
else if (prepare_footer(body))