aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-09-29 00:21:58 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-09-29 00:21:58 +0000
commit5594aa6a6e82d70fdcdfb59d208d8bf539446598 (patch)
tree97e0a176aeb840416606c5fca8c17148af35db95 /src
parent3b97d9f525bf7fe5023d4b8c202de9f55d011ea1 (diff)
downloadpostgresql-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')
-rw-r--r--src/backend/regex/regc_locale.c23
-rw-r--r--src/backend/regex/regcomp.c3
2 files changed, 21 insertions, 5 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:
diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c
index cfc2481fca3..1d266b41ef8 100644
--- a/src/backend/regex/regcomp.c
+++ b/src/backend/regex/regcomp.c
@@ -28,7 +28,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Header: /cvsroot/pgsql/src/backend/regex/regcomp.c,v 1.38 2003/08/08 21:41:56 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/regex/regcomp.c,v 1.39 2003/09/29 00:21:58 tgl Exp $
*
*/
@@ -184,6 +184,7 @@ static int pg_isalnum(pg_wchar c);
static int pg_isupper(pg_wchar c);
static int pg_islower(pg_wchar c);
static int pg_isgraph(pg_wchar c);
+static int pg_isprint(pg_wchar c);
static int pg_ispunct(pg_wchar c);
static int pg_isspace(pg_wchar c);
static pg_wchar pg_toupper(pg_wchar c);