# HG changeset patch # User Karl Heuer # Date 910681385 0 # Node ID 40072cd9d21c794824dfa20198e53b33abdff434 # Parent 32b916f68c794fe298446d984a535126853ec3ab (regex_compile): Handle translation of multibyte exact-match characters. diff -r 32b916f68c79 -r 40072cd9d21c src/regex.c --- a/src/regex.c Tue Nov 10 00:24:40 1998 +0000 +++ b/src/regex.c Tue Nov 10 07:03:05 1998 +0000 @@ -2903,8 +2903,12 @@ p1 = p - 1; /* P1 points the head of C. */ #ifdef emacs if (bufp->multibyte) - /* Set P to the next character boundary. */ - p += MULTIBYTE_FORM_LENGTH (p1, pend - p1) - 1; + { + c = STRING_CHAR (p1, pend - p1); + c = TRANSLATE (c); + /* Set P to the next character boundary. */ + p += MULTIBYTE_FORM_LENGTH (p1, pend - p1) - 1; + } #endif /* If no exactn currently being built. */ if (!pending_exact @@ -2933,16 +2937,23 @@ pending_exact = b - 1; } - /* Here, C may translated, therefore C may not equal to *P1. */ - while (1) +#ifdef emacs + if (! SINGLE_BYTE_CHAR_P (c)) + { + unsigned char work[4], *str; + int i = CHAR_STRING (c, work, str); + int j; + for (j = 0; j < i; j++) + { + BUF_PUSH (str[j]); + (*pending_exact)++; + } + } + else +#endif { BUF_PUSH (c); (*pending_exact)++; - if (++p1 == p) - break; - - /* Rest of multibyte form should be copied literally. */ - c = *(unsigned char *)p1; } break; } /* switch (c) */