X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fregex.c;h=9549a98b54ba36980fe956b8957e63d4e21f1c6b;hb=884214f14fdbd0a4a368d2a36d5e50324fa1d52a;hp=da8f91d8a67fbd4f09e35fc0a512598d0c0ccd11;hpb=717ae819c55d2aca9f4bf2e1198e035ca64114ac;p=i3%2Fi3 diff --git a/src/regex.c b/src/regex.c index da8f91d8..9549a98b 100644 --- a/src/regex.c +++ b/src/regex.c @@ -1,12 +1,14 @@ +#undef I3__FILE__ +#define I3__FILE__ "regex.c" /* * 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" /* @@ -25,9 +27,12 @@ struct regex *regex_new(const char *pattern) { struct regex *re = scalloc(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 */ - int options = PCRE_UCP | PCRE_UTF8; + 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 */ @@ -49,10 +54,22 @@ struct regex *regex_new(const char *pattern) { return re; } +/* + * Frees the given regular expression. It must not be used afterwards! + * + */ +void regex_free(struct regex *regex) { + if (!regex) + return; + FREE(regex->pattern); + FREE(regex->regex); + FREE(regex->extra); +} + /* * 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) {