From 212cc638bdc8e0560ea6945b306f150ad9f562e7 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 27 Dec 2005 05:47:21 +0000 Subject: [PATCH] (lisp_string_width): Check multibyteness of STRING. --- src/charset.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/charset.c b/src/charset.c index 2c985b14dbc..fb9804c0306 100644 --- a/src/charset.c +++ b/src/charset.c @@ -1344,6 +1344,10 @@ lisp_string_width (string, precision, nchars, nbytes) { 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; @@ -1366,8 +1370,12 @@ lisp_string_width (string, precision, nchars, nbytes) } 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)) @@ -1378,7 +1386,10 @@ lisp_string_width (string, precision, nchars, nbytes) 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]); } -- 2.39.5