* please see the file GPL in the top level source directory.
*/
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <lib-lib/mem.h>
-#include <lib-lib/str.h>
-#include <lib-lib/rx.h>
+#include "lib-lib.h"
rx_t *rx_compile(const char *s, int flags)
{
p_delete(p);
}
-int rx_list_match(list2_t *l, const char *pat)
+int rx_list_match(rx_t *l, const char *pat)
{
- int i;
-
- if (!pat || !*pat || list_empty(l))
+ if (!pat || !*pat)
return 0;
- for (i = 0; i < l->length; i++) {
- if (!REGEXEC(((rx_t*)l->data[i])->rx, pat))
+ while (l) {
+ if (!REGEXEC(l->rx, pat))
return 1;
+ l = l->next;
}
return 0;
}
-int rx_lookup (list2_t *l, const char *pat)
+rx_t **rx_lookup(rx_t **l, const char *pat)
+{
+ if (!pat || !*pat)
+ return NULL;
+
+ while (*l) {
+ if (!strcmp((*l)->pattern, pat))
+ return l;
+ l = &(*l)->next;
+ }
+
+ return NULL;
+}
+
+int rx_sanitize_string(char *dst, ssize_t n, const char *src)
{
- int i;
+ while (*src) {
+ if (n <= 1)
+ break;
- if (!pat || !*pat || list_empty(l))
- return -1;
+ /* these characters must be escaped in regular expressions */
+ if (strchr("^.[$()|*+?{\\", *src)) {
+ if (n <= 2)
+ break;
- for (i = 0; i < l->length; i++) {
- if (!strcmp(((rx_t*)l->data[i])->pattern, pat))
- return i;
+ *dst++ = '\\';
+ n--;
+ }
+
+ *dst++ = *src++;
+ n--;
}
- return -1;
+ *dst = '\0';
+
+ return *src ? -1 : 0;
}