changeset 22183:3eedfddbbadd

(print_string): Don't ignore garbage bytes following a multibyte characters. (print): Likewise.
author Kenichi Handa <handa@m17n.org>
date Fri, 22 May 1998 09:44:27 +0000
parents 8075f717f3e4
children 003ac1231096
files src/print.c
diffstat 1 files changed, 10 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/print.c	Fri May 22 06:29:05 1998 +0000
+++ b/src/print.c	Fri May 22 09:44:27 1998 +0000
@@ -589,8 +589,8 @@
 	    /* Here, we must convert each multi-byte form to the
 	       corresponding character code before handing it to PRINTCHAR.  */
 	    int len;
-	    int ch = STRING_CHAR_AND_LENGTH (XSTRING (string)->data + i,
-					     size_byte - i, len);
+	    int ch = STRING_CHAR_AND_CHAR_LENGTH (XSTRING (string)->data + i,
+						  size_byte - i, len);
 
 	    PRINTCHAR (ch);
 	    i += len;
@@ -1188,6 +1188,7 @@
 	  register int i, i_byte;
 	  register unsigned char c;
 	  struct gcpro gcpro1;
+	  unsigned char *str;
 	  int size_byte;
 	  /* 1 means we must ensure that the next character we output
 	     cannot be taken as part of a hex character escape.  */
@@ -1204,6 +1205,7 @@
 #endif
 
 	  PRINTCHAR ('\"');
+	  str = XSTRING (obj)->data;
 	  size_byte = STRING_BYTES (XSTRING (obj));
 
 	  for (i = 0, i_byte = 0; i_byte < size_byte;)
@@ -1214,9 +1216,13 @@
 	      int c;
 
 	      if (STRING_MULTIBYTE (obj))
-		FETCH_STRING_CHAR_ADVANCE (c, obj, i, i_byte);
+		{
+		  c = STRING_CHAR_AND_CHAR_LENGTH (str + i_byte,
+						   size_byte - i_byte, len);
+		  i_byte += len;
+		}
 	      else
-		c = XSTRING (obj)->data[i_byte++];
+		c = str[i_byte++];
 
 	      QUIT;