changeset 23670:40072cd9d21c

(regex_compile): Handle translation of multibyte exact-match characters.
author Karl Heuer <kwzh@gnu.org>
date Tue, 10 Nov 1998 07:03:05 +0000
parents 32b916f68c79
children 4fec4f8a1ee2
files src/regex.c
diffstat 1 files changed, 20 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- 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) */