diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2014-03-10 22:15:36 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2014-03-10 22:15:36 +0200 |
commit | ba969a84610a47183856f99349056e4b49c8eb7f (patch) | |
tree | a1bb8eea40e85e5191160c5066488b77f6efd39b | |
parent | 9234beafca50945843fe41697000d4bcc7d5b0ba (diff) | |
download | egawk-ba969a84610a47183856f99349056e4b49c8eb7f.tar.gz egawk-ba969a84610a47183856f99349056e4b49c8eb7f.tar.bz2 egawk-ba969a84610a47183856f99349056e4b49c8eb7f.zip |
Fixes from GNULIB for Mac OS X mixed case matching.
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | regex_internal.c | 15 |
2 files changed, 7 insertions, 10 deletions
@@ -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; |