diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-09-29 00:21:58 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-09-29 00:21:58 +0000 |
commit | 5594aa6a6e82d70fdcdfb59d208d8bf539446598 (patch) | |
tree | 97e0a176aeb840416606c5fca8c17148af35db95 /src/backend/regex/regc_locale.c | |
parent | 3b97d9f525bf7fe5023d4b8c202de9f55d011ea1 (diff) | |
download | postgresql-5594aa6a6e82d70fdcdfb59d208d8bf539446598.tar.gz postgresql-5594aa6a6e82d70fdcdfb59d208d8bf539446598.zip |
Fix broken definition of :print: character class, per Bruno Wolff.
Also, make :alnum: character class directly dependent on isalnum()
rather than guessing.
Diffstat (limited to 'src/backend/regex/regc_locale.c')
-rw-r--r-- | src/backend/regex/regc_locale.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/backend/regex/regc_locale.c b/src/backend/regex/regc_locale.c index 99ab48cd8a8..647e6b134eb 100644 --- a/src/backend/regex/regc_locale.c +++ b/src/backend/regex/regc_locale.c @@ -47,7 +47,7 @@ * permission to use and distribute the software in accordance with the * terms specified in this license. * - * $Header: /cvsroot/pgsql/src/backend/regex/regc_locale.c,v 1.3 2003/08/08 21:41:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/regex/regc_locale.c,v 1.4 2003/09/29 00:21:58 tgl Exp $ */ /* ASCII character-name table */ @@ -389,6 +389,12 @@ pg_isgraph(pg_wchar c) } static int +pg_isprint(pg_wchar c) +{ + return (c >= 0 && c <= UCHAR_MAX && isprint((unsigned char) c)); +} + +static int pg_ispunct(pg_wchar c) { return (c >= 0 && c <= UCHAR_MAX && ispunct((unsigned char) c)); @@ -657,16 +663,25 @@ cclass(struct vars * v, /* context */ switch ((enum classes) index) { case CC_PRINT: + cv = getcvec(v, UCHAR_MAX, 0, 0); + if (cv) + { + for (i = 0; i <= UCHAR_MAX; i++) + { + if (pg_isprint((chr) i)) + addchr(cv, (chr) i); + } + } + break; case CC_ALNUM: - cv = getcvec(v, UCHAR_MAX, 1, 0); + cv = getcvec(v, UCHAR_MAX, 0, 0); if (cv) { for (i = 0; i <= UCHAR_MAX; i++) { - if (pg_isalpha((chr) i)) + if (pg_isalnum((chr) i)) addchr(cv, (chr) i); } - addrange(cv, (chr) '0', (chr) '9'); } break; case CC_ALPHA: |