diff options
-rw-r--r-- | src/nvim/api/vim.c | 2 | ||||
-rw-r--r-- | src/nvim/eval.c | 4 | ||||
-rw-r--r-- | src/nvim/mbyte.c | 22 | ||||
-rw-r--r-- | src/nvim/message.c | 2 | ||||
-rw-r--r-- | src/nvim/screen.c | 2 |
5 files changed, 16 insertions, 16 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 59f4721da2..f07bfb196e 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -90,7 +90,7 @@ Integer vim_strwidth(String str, Error *err) } char *buf = xstrndup(str.data, str.size); - Integer rv = mb_string2cells((char_u *)buf, -1); + Integer rv = (Integer) mb_string2cells((char_u *) buf); free(buf); return rv; } diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 31070c1118..c209f5c4af 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -13696,9 +13696,7 @@ static void f_strwidth(typval_T *argvars, typval_T *rettv) { char_u *s = get_tv_string(&argvars[0]); - rettv->vval.v_number = (varnumber_T)( - mb_string2cells(s, -1) - ); + rettv->vval.v_number = (varnumber_T) mb_string2cells(s); } /* diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c index 8a669b0bc8..899b94e0fb 100644 --- a/src/nvim/mbyte.c +++ b/src/nvim/mbyte.c @@ -1305,17 +1305,19 @@ static int dbcs_char2cells(int c) return MB_BYTE2LEN((unsigned)c >> 8); } -/* - * Return the number of cells occupied by string "p". - * Stop at a NUL character. When "len" >= 0 stop at character "p[len]". - */ -int mb_string2cells(const char_u *p, int len) +/// Calculate the number of cells occupied by string `str`. +/// +/// @param str The source string, may not be NULL, must be a NUL-terminated +/// string. +/// @return The number of cells occupied by string `str` +size_t mb_string2cells(const char_u *str) { - int i; - int clen = 0; + size_t clen = 0; + + for (const char_u *p = str; *p != NUL; p += (*mb_ptr2len)(p)) { + clen += (*mb_ptr2cells)(p); + } - for (i = 0; (len < 0 || i < len) && p[i] != NUL; i += (*mb_ptr2len)(p + i)) - clen += (*mb_ptr2cells)(p + i); return clen; } @@ -2953,7 +2955,7 @@ int utf_head_off(const char_u *base, const char_u *p) for (q = p;; --q) { /* Move s to the last byte of this char. */ const char_u *s; - for (s = q; (s[1] & 0xc0) == 0x80; ++s); + for (s = q; (s[1] & 0xc0) == 0x80; ++s) {} /* Move q to the first byte of this char. */ while (q > base && (*q & 0xc0) == 0x80) diff --git a/src/nvim/message.c b/src/nvim/message.c index 41a2345171..96be3bb17d 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -3352,7 +3352,7 @@ int vim_vsnprintf(char *str, size_t str_m, char *fmt, va_list ap, typval_T *tvs) if (fmt_spec == 'S') { if (min_field_width != 0) min_field_width += STRLEN(str_arg) - - mb_string2cells((char_u *)str_arg, -1); + - mb_string2cells((char_u *) str_arg); if (precision) { char_u *p1 = (char_u *)str_arg; size_t i; diff --git a/src/nvim/screen.c b/src/nvim/screen.c index d36ce6ca2b..18b1797c36 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -4834,7 +4834,7 @@ void win_redr_status(win_T *wp) int clen = 0, i; /* Count total number of display cells. */ - clen = mb_string2cells(p, -1); + clen = (int) mb_string2cells(p); /* Find first character that will fit. * Going from start to end is much faster for DBCS. */ |