From: Kenichi Handa Date: Wed, 20 Apr 2005 07:21:47 +0000 (+0000) Subject: (boyer_moore): Fix previous change. X-Git-Tag: ttn-vms-21-2-B4~879 X-Git-Url: https://code.delx.au/gnu-emacs/commitdiff_plain/620a5178482e9f57b71a971cc61bea344da3793a (boyer_moore): Fix previous change. --- diff --git a/src/search.c b/src/search.c index d86a7cca7b..73ec3a78e5 100644 --- a/src/search.c +++ b/src/search.c @@ -1692,22 +1692,31 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt, i = infinity; if (! NILP (trt)) { - /* If the byte currently looking at is a head of a character - to check case-equivalents, set CH to that character. An - ASCII character and a non-ASCII character matching with - CHARSET_BASE are to be checked. */ + /* If the byte currently looking at is the last of a + character to check case-equivalents, set CH to that + character. An ASCII character and a non-ASCII character + matching with CHARSET_BASE are to be checked. */ int ch = -1; if (ASCII_BYTE_P (*ptr) || ! multibyte) ch = *ptr; - else if (charset_base && CHAR_HEAD_P (*ptr)) + else if (charset_base + && (pat_end - ptr) == 1 || CHAR_HEAD_P (ptr[1])) { - ch = STRING_CHAR (ptr, pat_end - ptr); + unsigned char *charstart = ptr - 1; + + while (! (CHAR_HEAD_P (*charstart))) + charstart--; + ch = STRING_CHAR (charstart, ptr - charstart + 1); if (charset_base != (ch & ~CHAR_FIELD3_MASK)) ch = -1; } - j = *ptr; + if (ch > 0400) + j = ((unsigned char) ch) | 0200; + else + j = *ptr; + if (i == infinity) stride_for_teases = BM_tab[j]; @@ -1717,12 +1726,8 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt, if (ch >= 0) { int starting_ch = ch; - int starting_j; + int starting_j = j; - if (ch > 0400) - starting_j = ((unsigned char) ch) | 0200; - else - starting_j = (unsigned char) ch; while (1) { TRANSLATE (ch, inverse_trt, ch);