summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2014-03-10 22:15:36 +0200
committerArnold D. Robbins <arnold@skeeve.com>2014-03-10 22:15:36 +0200
commitba969a84610a47183856f99349056e4b49c8eb7f (patch)
treea1bb8eea40e85e5191160c5066488b77f6efd39b
parent9234beafca50945843fe41697000d4bcc7d5b0ba (diff)
downloadgawk-ba969a84610a47183856f99349056e4b49c8eb7f.tar.gz
Fixes from GNULIB for Mac OS X mixed case matching.
-rw-r--r--ChangeLog2
-rw-r--r--regex_internal.c15
2 files changed, 7 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index bdd31107..d889f9ef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,8 @@
2014-03-10 Arnold D. Robbins <arnold@skeeve.com>
* dfa.h, dfa.c: Sync with grep. Yet again.
+ * regex_internal.c (built_wcs_upper_buffer, build_upper_buffer):
+ Fixes from GNULIB for mixed case matching on Mac OS X.
2014-03-08 Andrew J. Schorr <aschorr@telemetry-investments.com>
diff --git a/regex_internal.c b/regex_internal.c
index 10dd6e00..056cff3d 100644
--- a/regex_internal.c
+++ b/regex_internal.c
@@ -320,12 +320,11 @@ build_wcs_upper_buffer (re_string_t *pstr)
+ byte_idx), remain_len, &pstr->cur_state);
if (BE (mbclen + 2 > 2, 1))
{
- wchar_t wcu = wc;
- if (iswlower (wc))
+ wchar_t wcu = towupper (wc);
+ if (wcu != wc)
{
size_t mbcdlen;
- wcu = towupper (wc);
mbcdlen = wcrtomb (buf, wcu, &prev_st);
if (BE (mbclen == mbcdlen, 1))
memcpy (pstr->mbs + byte_idx, buf, mbclen);
@@ -390,12 +389,11 @@ build_wcs_upper_buffer (re_string_t *pstr)
mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
if (BE (mbclen + 2 > 2, 1))
{
- wchar_t wcu = wc;
- if (iswlower (wc))
+ wchar_t wcu = towupper (wc);
+ if (wcu != wc)
{
size_t mbcdlen;
- wcu = towupper (wc);
mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st);
if (BE (mbclen == mbcdlen, 1))
memcpy (pstr->mbs + byte_idx, buf, mbclen);
@@ -547,10 +545,7 @@ build_upper_buffer (re_string_t *pstr)
int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx];
if (BE (pstr->trans != NULL, 0))
ch = pstr->trans[ch];
- if (islower (ch))
- pstr->mbs[char_idx] = toupper (ch);
- else
- pstr->mbs[char_idx] = ch;
+ pstr->mbs[char_idx] = toupper (ch);
}
pstr->valid_len = char_idx;
pstr->valid_raw_len = char_idx;