X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-lib%2Frx.c;h=79ec5b83873793e44ea9d6ebaef22c6642c6c29b;hp=21cbd332e882fdb4c005f3ebbdad2bc296e9d0a0;hb=20392fc3c433909de76c676c235524acd96bec60;hpb=6c292f6b369f019cc9a72a0ee65d60e172ee3370 diff --git a/lib-lib/rx.c b/lib-lib/rx.c index 21cbd33..79ec5b8 100644 --- a/lib-lib/rx.c +++ b/lib-lib/rx.c @@ -38,11 +38,26 @@ rx_t *rx_compile(const char *s, int flags) return pp; } +int rx_validate(const char *s, char *errbuf, ssize_t errlen) +{ + regex_t re; + int res; + + p_clear(&re, 1); + res = REGCOMP(&re, NONULL(s), 0); + if (res) { + regerror(res, &re, errbuf, errlen); + } + regfree(&re); + + return res; +} + void rx_set_template(rx_t *rx, const char *tpl) { const char *p = tpl; - m_strreplace(&rx->template, tpl); + m_strreplace(&rx->tpl, tpl); rx->nmatch = 0; while ((p = strchr(p, '%'))) { @@ -58,13 +73,12 @@ void rx_set_template(rx_t *rx, const char *tpl) rx->nmatch++; /* match 0 is always the whole expr */ } -void rx_delete(rx_t **p) +void rx_wipe(rx_t *rx) { - p_delete(&(*p)->pattern); - regfree((*p)->rx); - p_delete(&(*p)->rx); - p_delete(&(*p)->template); - p_delete(p); + p_delete(&rx->pattern); + regfree(rx->rx); + p_delete(&rx->rx); + p_delete(&rx->tpl); } int rx_list_match(rx_t *l, const char *s) @@ -98,7 +112,7 @@ int rx_list_match2(rx_t *l, const char *s, char *dst, int dlen) if (regexec(l->rx, s, l->nmatch, pmatch, 0) == 0) { /* Copy template into dst, with substitutions. */ - const char *p = l->template, *q; + const char *p = l->tpl, *q; for (q = strchr(p, '%'); q; q = strchr(p + 1, '%')) { int n; @@ -125,11 +139,11 @@ int rx_list_match2(rx_t *l, const char *s, char *dst, int dlen) rx_t **rx_lookup(rx_t **l, const char *pat) { - if (!pat || !*pat) + if (m_strisempty(pat)) return NULL; while (*l) { - if (!strcmp((*l)->pattern, pat)) + if (!m_strcmp((*l)->pattern, pat)) return l; l = &(*l)->next; }