Fix broken definition of :print: character class, per Bruno Wolff.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 29 Sep 2003 00:21:58 +0000 (00:21 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 29 Sep 2003 00:21:58 +0000 (00:21 +0000)
Also, make :alnum: character class directly dependent on isalnum()
rather than guessing.

src/backend/regex/regc_locale.c
src/backend/regex/regcomp.c

index 99ab48cd8a873d06bc657ed8f01a5d62df029f14..647e6b134eb3909a4cc0cb387a4c4ee2704ceb98 100644 (file)
@@ -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 */
@@ -388,6 +388,12 @@ pg_isgraph(pg_wchar c)
    return (c >= 0 && c <= UCHAR_MAX && isgraph((unsigned char) 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)
 {
@@ -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:
index cfc2481fca3308ab074881b0186ea9e54b0d8070..1d266b41ef896cd3ddf85a544854058c5abfbbbf 100644 (file)
@@ -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);