diff options
author | Marc G. Fournier <scrappy@hub.org> | 1998-03-15 07:39:04 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1998-03-15 07:39:04 +0000 |
commit | 661ecf3c48e16a9add216287eb969d7615e47968 (patch) | |
tree | 91b54d5905aa2e22bd0ae9ea8c6b0f3cab75d3f4 /src/backend/regex/regexec.c | |
parent | 31a925c4d07675bc098a742ee9ca642ec79a40ee (diff) | |
download | postgresql-661ecf3c48e16a9add216287eb969d7615e47968.tar.gz postgresql-661ecf3c48e16a9add216287eb969d7615e47968.zip |
From: t-ishii@sra.co.jp
Included are patches intended for allowing PostgreSQL to handle
multi-byte charachter sets such as EUC(Extende Unix Code), Unicode and
Mule internal code. With the MB patch you can use multi-byte character
sets in regexp and LIKE. The encoding system chosen is determined at
the compile time.
To enable the MB extension, you need to define a variable "MB" in
Makefile.global or in Makefile.custom. For further information please
take a look at README.mb under doc directory.
(Note that unlike "jp patch" I do not use modified GNU regexp any
more. I changed Henry Spencer's regexp coming with PostgreSQL.)
Diffstat (limited to 'src/backend/regex/regexec.c')
-rw-r--r-- | src/backend/regex/regexec.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/backend/regex/regexec.c b/src/backend/regex/regexec.c index e3ac5cd0644..8a51810a203 100644 --- a/src/backend/regex/regexec.c +++ b/src/backend/regex/regexec.c @@ -164,6 +164,11 @@ int eflags; { struct re_guts *g = preg->re_g; +#ifdef MB + pg_wchar *str; + int sts; +#endif + #ifdef REDEBUG #define GOODFLAGS(f) (f) #else @@ -177,8 +182,24 @@ int eflags; return (REG_BADPAT); eflags = GOODFLAGS(eflags); +#ifdef MB + str = (pg_wchar *)malloc((strlen(string)+1) * sizeof(pg_wchar)); + if (!str) { + return(REG_ESPACE); + } + (void)pg_mb2wchar((unsigned char *)string,str); if (g->nstates <= CHAR_BIT * sizeof(states1) && !(eflags & REG_LARGE)) - return (smatcher(g, (char *) string, nmatch, pmatch, eflags)); + sts = smatcher(g, str, nmatch, pmatch, eflags); else - return (lmatcher(g, (char *) string, nmatch, pmatch, eflags)); + sts = lmatcher(g, str, nmatch, pmatch, eflags); + free((char *)str); + return(sts); + +# else + + if (g->nstates <= CHAR_BIT * sizeof(states1) && !(eflags & REG_LARGE)) + return (smatcher(g, (pg_wchar *) string, nmatch, pmatch, eflags)); + else + return (lmatcher(g, (pg_wchar *) string, nmatch, pmatch, eflags)); +#endif } |