From 3e48c661366a0cd20bd38fc006b90d01d4c997a0 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 5 May 2002 00:50:31 +0000
Subject: [PATCH] Fix code to work when isalpha and friends are macros, not
 functions.

---
 src/backend/regex/regcomp.c | 71 ++++++++++++++++++++++++++++++++-----
 1 file changed, 63 insertions(+), 8 deletions(-)

diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c
index 5392953c6a9..bea464bd2ae 100644
--- a/src/backend/regex/regcomp.c
+++ b/src/backend/regex/regcomp.c
@@ -124,8 +124,13 @@ static void findmust(struct parse * p, struct re_guts * g);
 static sopno pluscount(struct parse * p, struct re_guts * g);
 static int	pg_isdigit(int c);
 static int	pg_isalpha(int c);
+static int	pg_isalnum(int c);
 static int	pg_isupper(int c);
 static int	pg_islower(int c);
+static int	pg_iscntrl(int c);
+static int	pg_isgraph(int c);
+static int	pg_isprint(int c);
+static int	pg_ispunct(int c);
 
 static pg_wchar nuls[10];		/* place to point scanner in event of
 								 * error */
@@ -1709,6 +1714,16 @@ pg_isalpha(int c)
 #endif
 }
 
+static int
+pg_isalnum(int c)
+{
+#ifdef MULTIBYTE
+	return (c >= 0 && c <= UCHAR_MAX && isalnum((unsigned char) c));
+#else
+	return (isalnum((unsigned char) c));
+#endif
+}
+
 static int
 pg_isupper(int c)
 {
@@ -1729,6 +1744,46 @@ pg_islower(int c)
 #endif
 }
 
+static int
+pg_iscntrl(int c)
+{
+#ifdef MULTIBYTE
+	return (c >= 0 && c <= UCHAR_MAX && iscntrl((unsigned char) c));
+#else
+	return (iscntrl((unsigned char) c));
+#endif
+}
+
+static int
+pg_isgraph(int c)
+{
+#ifdef MULTIBYTE
+	return (c >= 0 && c <= UCHAR_MAX && isgraph((unsigned char) c));
+#else
+	return (isgraph((unsigned char) c));
+#endif
+}
+
+static int
+pg_isprint(int c)
+{
+#ifdef MULTIBYTE
+	return (c >= 0 && c <= UCHAR_MAX && isprint((unsigned char) c));
+#else
+	return (isprint((unsigned char) c));
+#endif
+}
+
+static int
+pg_ispunct(int c)
+{
+#ifdef MULTIBYTE
+	return (c >= 0 && c <= UCHAR_MAX && ispunct((unsigned char) c));
+#else
+	return (ispunct((unsigned char) c));
+#endif
+}
+
 static struct cclass *
 cclass_init(void)
 {
@@ -1756,17 +1811,17 @@ cclass_init(void)
         char *chars;
     } cclass_factories [] =
         {
-            { "alnum", isalnum, NULL },
-            { "alpha", isalpha, NULL },
+            { "alnum", pg_isalnum, NULL },
+            { "alpha", pg_isalpha, NULL },
             { "blank", NULL, " \t" },
-            { "cntrl", iscntrl, NULL },
+            { "cntrl", pg_iscntrl, NULL },
             { "digit", NULL, "0123456789" },
-            { "graph", isgraph, NULL },
-            { "lower", islower, NULL },
-            { "print", isprint, NULL },
-            { "punct", ispunct, NULL },
+            { "graph", pg_isgraph, NULL },
+            { "lower", pg_islower, NULL },
+            { "print", pg_isprint, NULL },
+            { "punct", pg_ispunct, NULL },
             { "space", NULL, "\t\n\v\f\r " },
-            { "upper", isupper, NULL },
+            { "upper", pg_isupper, NULL },
             { "xdigit", NULL, "0123456789ABCDEFabcdef" },
             { NULL, NULL, NULL }
         };
-- 
GitLab