* vim:ts=4:sw=4:expandtab
*
* i3 - an improved dynamic tiling window manager
- * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE)
+ * © 2009 Michael Stapelberg and contributors (see also: LICENSE)
*
+ * regex.c: Interface to libPCRE (perl compatible regular expressions).
*
*/
-
#include "all.h"
/*
const char *error;
int errorcode, offset;
- struct regex *re = scalloc(sizeof(struct regex));
+ struct regex *re = scalloc(1, sizeof(struct regex));
re->pattern = sstrdup(pattern);
int options = PCRE_UTF8;
-#ifdef PCRE_HAS_UCP
/* We use PCRE_UCP so that \B, \b, \D, \d, \S, \s, \W, \w and some POSIX
* character classes play nicely with Unicode */
options |= PCRE_UCP;
-#endif
while (!(re->regex = pcre_compile2(pattern, options, &errorcode, &error, &offset, NULL))) {
/* If the error is that PCRE was not compiled with UTF-8 support we
* disable it and try again */
}
ELOG("PCRE regular expression compilation failed at %d: %s\n",
offset, error);
+ regex_free(re);
return NULL;
}
re->extra = pcre_study(re->regex, 0, &error);
FREE(regex->pattern);
FREE(regex->regex);
FREE(regex->extra);
+ FREE(regex);
}
/*
* Checks if the given regular expression matches the given input and returns
* true if it does. In either case, it logs the outcome using LOG(), so it will
- * be visible without any debug loglevel.
+ * be visible without debug logging.
*
*/
bool regex_matches(struct regex *regex, const char *input) {