diff --git a/src/dfa.c b/src/dfa.c index 6ab4e05..5e6120d 100644 --- a/src/dfa.c +++ b/src/dfa.c @@ -1094,7 +1094,6 @@ parse_bracket_exp (void) work_mbc->range_ends[work_mbc->nranges++] = case_fold ? towlower (wc2) : (wchar_t) wc2; -#ifndef GREP if (case_fold && (iswalpha (wc) || iswalpha (wc2))) { REALLOC_IF_NECESSARY (work_mbc->range_sts, @@ -1104,7 +1103,6 @@ parse_bracket_exp (void) range_ends_al, work_mbc->nranges + 1); work_mbc->range_ends[work_mbc->nranges++] = towupper (wc2); } -#endif } else { @@ -1156,11 +1154,7 @@ parse_bracket_exp (void) work_mbc->nchars + 1); work_mbc->chars[work_mbc->nchars++] = wc; } -#ifdef GREP - continue; -#else wc = towupper (wc); -#endif } if (!setbit_wc (wc, ccl)) { @@ -1754,13 +1748,11 @@ atom (void) else if (MBS_SUPPORT && tok == WCHAR) { addtok_wc (case_fold ? towlower (wctok) : wctok); -#ifndef GREP if (case_fold && iswalpha (wctok)) { addtok_wc (towupper (wctok)); addtok (OR); } -#endif tok = lex (); } diff --git a/src/dfasearch.c b/src/dfasearch.c index 46581ff..04f26e4 100644 --- a/src/dfasearch.c +++ b/src/dfasearch.c @@ -95,6 +95,11 @@ kwsmusts (void) struct dfamust const *dm; char const *err; + /* Don't use kwsearch because case-insensitive matching is + expensive in multi-byte locales with it. */ + if (MB_CUR_MAX > 1 && match_icase) + return; + dm = dfamusts (dfa); if (dm) { @@ -220,19 +225,6 @@ EGexecute (char const *buf, size_t size, size_t *match_size, size_t i, ret_val; mb_len_map_t *map = NULL; - if (MB_CUR_MAX > 1) - { - if (match_icase) - { - /* mbtolower adds a NUL byte at the end. That will provide - space for the sentinel byte dfaexec may add. */ - char *case_buf = mbtolower (buf, &size, &map); - if (start_ptr) - start_ptr = case_buf + (start_ptr - buf); - buf = case_buf; - } - } - mb_start = buf; buflim = buf + size;