{
int len = SCHARS (string);
int len_byte = SBYTES (string);
+ /* This set multibyte to 0 even if STRING is multibyte when it
+ contains only ascii and eight-bit-graphic, but that's
+ intentional. */
+ int multibyte = len < len_byte;
const unsigned char *str = SDATA (string);
int i = 0, i_byte = 0;
int width = 0;
}
else if (dp)
{
- int c = STRING_CHAR_AND_LENGTH (str + i_byte, len - i_byte, bytes);
+ int c;
+ if (multibyte)
+ c = STRING_CHAR_AND_LENGTH (str + i_byte, len - i_byte, bytes);
+ else
+ c = str[i_byte], bytes = 1;
chars = 1;
val = DISP_CHAR_VECTOR (dp, c);
if (VECTORP (val))
else
{
chars = 1;
- PARSE_MULTIBYTE_SEQ (str + i_byte, len_byte - i_byte, bytes);
+ if (multibyte)
+ PARSE_MULTIBYTE_SEQ (str + i_byte, len_byte - i_byte, bytes);
+ else
+ bytes = 1;
thiswidth = ONE_BYTE_CHAR_WIDTH (str[i_byte]);
}