X-Git-Url: https://git.sur5r.net/?p=i3%2Fi3;a=blobdiff_plain;f=src%2Fregex.c;h=8f039157f6f7547d57e66733aa4bffdb23f72345;hp=f419e4bbf4e7d1a3cf739b17d12efeb74b1d6c85;hb=HEAD;hpb=0c51b57b992ac3ea5c14480d971d826d588cf865 diff --git a/src/regex.c b/src/regex.c index f419e4bb..8f039157 100644 --- a/src/regex.c +++ b/src/regex.c @@ -2,11 +2,11 @@ * 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" /* @@ -23,11 +23,12 @@ struct regex *regex_new(const char *pattern) { 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; /* 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; 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 */ @@ -37,6 +38,7 @@ struct regex *regex_new(const char *pattern) { } 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); @@ -59,12 +61,13 @@ void regex_free(struct regex *regex) { 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) {