summaryrefslogtreecommitdiff
path: root/regexset.c
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2009-09-05 15:28:08 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2009-09-05 15:28:08 +0200
commitf7fbbc5428d601833168b1d6f60d7ef344f5cc88 (patch)
treee2ee9735d7af3e6d86b575f2f9b332804c941e71 /regexset.c
parent4e80effe0ec3edcef9e2f240864eacab9cdbb035 (diff)
Add locale and multibyte support.
Set LC_CTYPE to support locales. Use wchar_t to handle multibyte strings. Generate character tables for PCRE to support locales.
Diffstat (limited to 'regexset.c')
-rw-r--r--regexset.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/regexset.c b/regexset.c
index c816217..5e2d002 100644
--- a/regexset.c
+++ b/regexset.c
@@ -7,10 +7,12 @@
struct regexset_t *regexes;
int rs_count;
+const unsigned char *rs_pcre_tables;
void rs_init() {
regexes = NULL;
rs_count = 0;
+ rs_pcre_tables = pcre_maketables();
}
static void re_error(const char *name, const char *pattern, const char *error, int erroffset) {
@@ -34,7 +36,7 @@ struct regexset_t *rs_add(const char *text, const char *join) {
const char *error;
int erroffset;
- rs->text = pcre_compile(text, 0, &error, &erroffset, NULL);
+ rs->text = pcre_compile(text, 0, &error, &erroffset, rs_pcre_tables);
if(rs->text == NULL) {
re_error("text", text, error, erroffset);
return NULL;
@@ -43,7 +45,7 @@ struct regexset_t *rs_add(const char *text, const char *join) {
/* Free compiled patterns from this point when failing. */
- rs->join = pcre_compile(join, 0, &error, &erroffset, NULL);
+ rs->join = pcre_compile(join, 0, &error, &erroffset, rs_pcre_tables);
if(rs->join == NULL) {
pcre_free(rs->text);
if(rs->text_e)
@@ -71,4 +73,6 @@ void rs_free() {
}
free(regexes);
regexes = NULL;
+ pcre_free((void*)rs_pcre_tables);
+ rs_pcre_tables = NULL;
}