projects
/
apps
/
madmutt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wibble.
[apps/madmutt.git]
/
lib-lib
/
rx.c
diff --git
a/lib-lib/rx.c
b/lib-lib/rx.c
index
d89d234
..
58e943c
100644
(file)
--- a/
lib-lib/rx.c
+++ b/
lib-lib/rx.c
@@
-29,7
+29,8
@@
rx_t *rx_compile(const char *s, int flags)
rx_t *pp = p_new(rx_t, 1);
pp->pattern = m_strdup(s);
rx_t *pp = p_new(rx_t, 1);
pp->pattern = m_strdup(s);
- pp->rx = p_new(regex_t, 1);
+ pp->rx = p_new(regex_t, 1);
+ pp->flags = flags;
if (REGCOMP(pp->rx, NONULL(s), flags) != 0) {
rx_delete(&pp);
if (REGCOMP(pp->rx, NONULL(s), flags) != 0) {
rx_delete(&pp);
@@
-38,6
+39,14
@@
rx_t *rx_compile(const char *s, int flags)
return pp;
}
return pp;
}
+rx_t *rx_dup(rx_t *r)
+{
+ rx_t *res = rx_compile(r->pattern, r->flags);
+ res->neg = r->neg;
+ rx_set_template(res, r->tpl);
+ return res;
+}
+
int rx_validate(const char *s, char *errbuf, ssize_t errlen)
{
regex_t re;
int rx_validate(const char *s, char *errbuf, ssize_t errlen)
{
regex_t re;
@@
-59,6
+68,8
@@
void rx_set_template(rx_t *rx, const char *tpl)
m_strreplace(&rx->tpl, tpl);
rx->nmatch = 0;
m_strreplace(&rx->tpl, tpl);
rx->nmatch = 0;
+ if (m_strisempty(rx->tpl))
+ return;
while ((p = strchr(p, '%'))) {
if (isdigit(*++p)) {
while ((p = strchr(p, '%'))) {
if (isdigit(*++p)) {