]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix handling of the multibyte form of raw-bytes in unibyte->multibyte conversion.
authorKenichi Handa <handa@m17n.org>
Tue, 2 Mar 2010 04:44:28 +0000 (13:44 +0900)
committerKenichi Handa <handa@m17n.org>
Tue, 2 Mar 2010 04:44:28 +0000 (13:44 +0900)
src/ChangeLog
src/character.c

index cb9b2d85d11cedb02c9c331235366acc6fc6dc82..aec692b39edf851853a40d37f994bb27cdd09928 100644 (file)
@@ -1,5 +1,9 @@
 2010-03-02  Kenichi Handa  <handa@m17n.org>
 
+       * character.c (parse_str_as_multibyte): Fix handling of the
+       multibyte form of raw-bytes.
+       (str_as_multibyte): Likewise.
+
        * buffer.c (Fset_buffer_multibyte): Fix handling of the multibyte
        form of raw-bytes.
 
index 583602fccb750b271a4493b34787ef0d392a7d0f..5912a70d0ce82f47815d151e6e481d92aa0deaa1 100644 (file)
@@ -630,7 +630,8 @@ parse_str_as_multibyte (str, len, nchars, nbytes)
       const unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
       while (str < adjusted_endp)
        {
-         if ((n = MULTIBYTE_LENGTH_NO_CHECK (str)) > 0)
+         if (! CHAR_BYTE8_HEAD_P (*str)
+             && (n = MULTIBYTE_LENGTH_NO_CHECK (str)) > 0)
            str += n, bytes += n;
          else
            str++, bytes += 2;
@@ -639,7 +640,8 @@ parse_str_as_multibyte (str, len, nchars, nbytes)
     }
   while (str < endp)
     {
-      if ((n = MULTIBYTE_LENGTH (str, endp)) > 0)
+      if (! CHAR_BYTE8_HEAD_P (*str)
+         && (n = MULTIBYTE_LENGTH (str, endp)) > 0)
        str += n, bytes += n;
       else
        str++, bytes += 2;
@@ -673,10 +675,13 @@ str_as_multibyte (str, len, nbytes, nchars)
     {
       unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
       while (p < adjusted_endp
+            && ! CHAR_BYTE8_HEAD_P (*p)
             && (n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0)
        p += n, chars++;
     }
-  while ((n = MULTIBYTE_LENGTH (p, endp)) > 0)
+  while (p < endp
+        && ! CHAR_BYTE8_HEAD_P (*p)
+        && (n = MULTIBYTE_LENGTH (p, endp)) > 0)
     p += n, chars++;
   if (nchars)
     *nchars = chars;
@@ -694,7 +699,8 @@ str_as_multibyte (str, len, nbytes, nchars)
       unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
       while (p < adjusted_endp)
        {
-         if ((n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0)
+         if (! CHAR_BYTE8_HEAD_P (*p)
+             && (n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0)
            {
              while (n--)
                *to++ = *p++;
@@ -710,7 +716,8 @@ str_as_multibyte (str, len, nbytes, nchars)
     }
   while (p < endp)
     {
-      if ((n = MULTIBYTE_LENGTH (p, endp)) > 0)
+      if (! CHAR_BYTE8_HEAD_P (*p)
+         && (n = MULTIBYTE_LENGTH (p, endp)) > 0)
        {
          while (n--)
            *to++ = *p++;