X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=lib-lib%2Frx.c;h=d89d23468f5ed697e779ba30ee6edda329b5bfab;hb=6aac4a85332ec3647c29a7b996cade972895a8b8;hp=02a01d0acdac5b4dfd457a3eb1b0062ba8c8cd1f;hpb=6b771604433435b4280a5fbae2612134fe4129dd;p=apps%2Fmadmutt.git diff --git a/lib-lib/rx.c b/lib-lib/rx.c index 02a01d0..d89d234 100644 --- a/lib-lib/rx.c +++ b/lib-lib/rx.c @@ -57,7 +57,7 @@ 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, '%'))) { @@ -78,7 +78,7 @@ void rx_wipe(rx_t *rx) p_delete(&rx->pattern); regfree(rx->rx); p_delete(&rx->rx); - p_delete(&rx->template); + p_delete(&rx->tpl); } int rx_list_match(rx_t *l, const char *s) @@ -112,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; @@ -148,7 +148,40 @@ rx_t **rx_lookup(rx_t **l, const char *pat) l = &(*l)->next; } - return NULL; + return l; +} + +void rx_list_add(rx_t **l, rx_t *rxp) +{ + l = rx_lookup(l, rxp->pattern); + if (*l) { + rx_t *r = rx_list_pop(l); + rx_delete(&r); + } + rx_list_push(l, rxp); +} + +void rx_list_add2(rx_t **l, rx_t **rxp) +{ + l = rx_lookup(l, (*rxp)->pattern); + if (*l) { + rx_t *r = rx_list_pop(l); + rx_delete(&r); + } + if (m_strisempty((*rxp)->tpl)) { + rx_delete(rxp); + } else { + rx_list_push(l, *rxp); + } +} + +void rx_list_remove(rx_t **l, const rx_t *r) +{ + l = rx_lookup(l, r->pattern); + if (*l) { + rx_t *tmp = rx_list_pop(l); + rx_delete(&tmp); + } } int rx_sanitize_string(char *dst, ssize_t n, const char *src)