Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,10 @@ AC_DISABLE_STATIC
AC_DISABLE_SHARED
LT_INIT([dlopen])

dnl Check for pcre library
TS_CHECK_PCRE
if test "x${enable_pcre}" != "xyes"; then
AC_MSG_ERROR([Cannot find pcre library. Configure --with-pcre=DIR])
fi
dnl Check for pcre2 library
AC_SUBST([PKG_CONFIG_PATH])
PKG_PROG_PKG_CONFIG
PKG_CHECK_MODULES([LIBPCRE], [libpcre2-8])

dnl Checks for using shared libraries from system
AC_ARG_ENABLE(
Expand Down
18 changes: 11 additions & 7 deletions src/rule.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,13 @@ int
init_rule(rule_t *rule)
{
if (rule->pattern_re == NULL) {
const char *reerr;
int reerroffset;
int reerr;
PCRE2_SIZE reerroffset;

rule->pattern_re =
pcre_compile(rule->pattern, 0, &reerr, &reerroffset, NULL);
pcre2_compile((PCRE2_SPTR)rule->pattern, PCRE2_ZERO_TERMINATED, 0, &reerr, &reerroffset, NULL);
if (rule->pattern_re == NULL) {
LOGE("Regex compilation of \"%s\" failed: %s, offset %d",
LOGE("Regex compilation of \"%s\" failed: %d, offset %ld",
rule->pattern, reerr, reerroffset);
return 0;
}
Expand All @@ -105,9 +105,13 @@ lookup_rule(const struct cork_dllist *rules, const char *name, size_t name_len)

cork_dllist_foreach_void(rules, curr, next) {
rule_t *rule = cork_container_of(curr, rule_t, entries);
if (pcre_exec(rule->pattern_re, NULL,
name, name_len, 0, 0, NULL, 0) >= 0)
pcre2_match_data *match_data = pcre2_match_data_create_from_pattern(rule->pattern_re, NULL);
if (pcre2_match(rule->pattern_re,
(PCRE2_SPTR)name, name_len, 0, 0, match_data, NULL) >= 1) {
pcre2_match_data_free(match_data);
return rule;
}
pcre2_match_data_free(match_data);
}

return NULL;
Expand All @@ -128,6 +132,6 @@ free_rule(rule_t *rule)

ss_free(rule->pattern);
if (rule->pattern_re != NULL)
pcre_free(rule->pattern_re);
pcre2_code_free(rule->pattern_re);
ss_free(rule);
}
9 changes: 3 additions & 6 deletions src/rule.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,14 @@

#include <libcork/ds.h>

#ifdef HAVE_PCRE_H
#include <pcre.h>
#elif HAVE_PCRE_PCRE_H
#include <pcre/pcre.h>
#endif
#define PCRE2_CODE_UNIT_WIDTH 8
#include <pcre2.h>

typedef struct rule {
char *pattern;

/* Runtime fields */
pcre *pattern_re;
pcre2_code *pattern_re;

struct cork_dllist_item entries;
} rule_t;
Expand Down