proper handling of regex lists.
[apps/madmutt.git] / lib-lib / rx.c
index 79ec5b8..d89d234 100644 (file)
@@ -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)