/* * This file is part of mutt-ng, see http://www.muttng.org/. * It's licensed under the GNU General Public License, * please see the file GPL in the top level source directory. */ #if HAVE_CONFIG_H #include "config.h" #endif #include "rx.h" #include "mem.h" #include "str.h" rx_t *rx_compile (const char *s, int flags) { rx_t *pp = mem_calloc (1, sizeof (rx_t)); pp->pattern = str_dup (s); pp->rx = mem_calloc (1, sizeof (regex_t)); if (REGCOMP(pp->rx, NONULL (s), flags) != 0) rx_free (&pp); return pp; } void rx_free (rx_t** p) { mem_free(&(*p)->pattern); regfree ((*p)->rx); mem_free(&(*p)->rx); mem_free(p); } int rx_compare (const rx_t* r1, const rx_t* r2) { return (str_cmp (r1->pattern, r2->pattern)); } int rx_list_match (list2_t* l, const char* pat) { int i = 0; if (!pat || !*pat || list_empty(l)) return (0); for (i = 0; i < l->length; i++) if (REGEXEC(((rx_t*) l->data[i])->rx, pat) == 0) return (1); return (0); } int rx_lookup (list2_t* l, const char* pat) { int i = 0; if (!pat || !*pat || list_empty(l)) return (-1); for (i = 0; i < l->length; i++) if (str_cmp (((rx_t*) l->data[i])->pattern, pat) == 0) return (i); return (-1); }