From 844672ad84c89898d3c3e0142fb2310731d9bffe Mon Sep 17 00:00:00 2001 From: cel Date: Fri, 16 Oct 2020 11:38:08 -0400 Subject: [PATCH] Show textual regex error --- zet.dpi.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/zet.dpi.c b/zet.dpi.c index 8e3449e..9b01517 100644 --- a/zet.dpi.c +++ b/zet.dpi.c @@ -351,29 +351,27 @@ static int zet_matches_regex(const char *id, regex_t *regex) { return found ? 1 : 0; } -static int zet_search_init_query(struct zet_search *zs, const char *query) { +static int zet_search_init_query(struct zet_search *zs, const char *query, char *errbuf, size_t errbuf_size) { int rc = regcomp(&zs->regex, query, REG_NOSUB | REG_EXTENDED | REG_ICASE); if (rc != 0) { - char errbuf[LINE_MAX]; - size_t sz = regerror(rc, &zs->regex, errbuf, sizeof(errbuf)); - if (sz > sizeof(errbuf)-1) { - errbuf[sizeof(errbuf)-2] = '.'; - errbuf[sizeof(errbuf)-3] = '.'; - errbuf[sizeof(errbuf)-4] = '.'; + size_t sz = regerror(rc, &zs->regex, errbuf, errbuf_size); + if (sz > errbuf_size-1 && errbuf_size >= 4) { + errbuf[errbuf_size-2] = '.'; + errbuf[errbuf_size-3] = '.'; + errbuf[errbuf_size-4] = '.'; } - warnx("regex: %s", errbuf); return -1; } return 0; } -static int zet_search_start(struct zet_search *zs, const char *id, char *query) { +static int zet_search_start(struct zet_search *zs, const char *id, const char *query, char *errbuf, size_t errbuf_size) { zs->dir = opendir(zet_dir); if (zs->dir == NULL) return -1; zs->id = id; if (query != NULL) { zs->has_regex = true; - return zet_search_init_query(zs, query); + return zet_search_init_query(zs, query, errbuf, errbuf_size); } else { zs->has_regex = false; return 0; @@ -413,7 +411,7 @@ static int zet_search_next(struct zet_search *zs, const char **idp) { } static int zet_search_close(struct zet_search *sz) { - regfree(&sz->regex); + if (sz->has_regex) regfree(&sz->regex); return closedir(sz->dir); } @@ -430,8 +428,9 @@ static int dpi_serve_zet_all(int fd) { ""); rc |= write_topbar(fd, PAGE_ALL, NULL, NULL); if (rc < 0) { warn("write"); close(fd); return 0; } - rc = zet_search_start(&zs, NULL, NULL); - if (rc < 0) return html_error(fd, "Unable to list"); + char errbuf[LINE_MAX] = ""; + rc = zet_search_start(&zs, NULL, NULL, errbuf, sizeof(errbuf)); + if (rc < 0) return html_error(fd, "Unable to list: %s", errbuf); rc = write_buf(fd, "