bkabrda / rpms / grep

Forked from rpms/grep 6 years ago
Clone
0efa5e9
From 68f09677b7aaedafa8c29280ccd76a034fe269f1 Mon Sep 17 00:00:00 2001
0efa5e9
From: Debian <debian>
0efa5e9
Date: Sun, 23 Nov 2008 17:28:46 +0100
0efa5e9
Subject: [PATCH] Case-insensitive list matching fix
0efa5e9
0efa5e9
This fixes case-insensitive matching of lists in multi-byte character sets.
0efa5e9
Original comment:
0efa5e9
0efa5e9
fix the following problem in multibyte locales.
0efa5e9
 % echo Y | egrep -i '[y]'
0efa5e9
 %
0efa5e9
0efa5e9
derived from gawk's dfa.c.
0efa5e9
0efa5e9
Original ticket: https://bugzilla.redhat.com/show_bug.cgi?id=123363
0efa5e9
Debian: 61-dfa.c-case_fold-charclass.patch
0efa5e9
---
0efa5e9
 src/dfa.c |   14 ++++++++++++++
0efa5e9
 1 files changed, 14 insertions(+), 0 deletions(-)
0efa5e9
0efa5e9
diff --git a/src/dfa.c b/src/dfa.c
0efa5e9
index 934be97..088c379 100644
0efa5e9
--- a/src/dfa.c
0efa5e9
+++ b/src/dfa.c
0efa5e9
@@ -689,6 +689,20 @@ parse_bracket_exp_mb ()
0efa5e9
 	  REALLOC_IF_NECESSARY(work_mbc->chars, wchar_t, chars_al,
0efa5e9
 			       work_mbc->nchars + 1);
0efa5e9
 	  work_mbc->chars[work_mbc->nchars++] = (wchar_t)wc;
0efa5e9
+	  if (case_fold && (iswlower((wint_t) wc) || iswupper((wint_t) wc)))
0efa5e9
+	    {
0efa5e9
+		wint_t altcase;
0efa5e9
+
0efa5e9
+		altcase = wc;		/* keeps compiler happy */
0efa5e9
+		if (iswlower((wint_t) wc))
0efa5e9
+		  altcase = towupper((wint_t) wc);
0efa5e9
+		else if (iswupper((wint_t) wc))
0efa5e9
+		  altcase = towlower((wint_t) wc);
0efa5e9
+
0efa5e9
+		REALLOC_IF_NECESSARY(work_mbc->chars, wchar_t, chars_al,
0efa5e9
+			       work_mbc->nchars + 1);
0efa5e9
+		work_mbc->chars[work_mbc->nchars++] = (wchar_t) altcase;
0efa5e9
+	    }
0efa5e9
 	}
0efa5e9
     }
0efa5e9
   while ((wc = wc1) != L']');
0efa5e9
-- 
0efa5e9
1.5.5.1
0efa5e9