From: Kenichi Handa Date: Tue, 27 Dec 2005 05:47:21 +0000 (+0000) Subject: (lisp_string_width): Check multibyteness of STRING. X-Git-Tag: emacs-pretest-22.0.90~5045 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=212cc638bdc8e0560ea6945b306f150ad9f562e7;p=emacs.git (lisp_string_width): Check multibyteness of STRING. --- 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]); }