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;
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->template);
}
int rx_list_match(rx_t *l, const char *s)
char *template; /* out template */
} rx_t;
-rx_t* rx_compile(const char*, int);
+rx_t *rx_compile(const char*, int);
+int rx_validate(const char*, char*, ssize_t);
void rx_set_template(rx_t *, const char*);
-void rx_delete(rx_t **);
+void rx_wipe(rx_t *);
+DO_DELETE(rx_t, rx);
+
DO_SLIST(rx_t, rx, rx_delete);
/* for handling lists */