Re: [PATCH] change utf8_strwidth() return type to size_t
"Hardik Kumar" <[email protected]>
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <[email protected]> |
On Sun Jul 26, 2026 at 7:11 PM IST, René Scharfe wrote: > On 7/26/26 2:34 PM, Hardik Kumar wrote: >> The patch changes the return types of `utf8_strwidth()` and >> `utf8_strnwidth()` to `size_t` (implementing a //TODO). Both functions >> have been updated in the header file also. >> >> Signed-off-by: Hardik Kumar <[email protected]> >> --- >> utf8.c | 13 ++++--------- >> utf8.h | 4 ++-- >> 2 files changed, 6 insertions(+), 11 deletions(-) > > What about callers that still expect int? Are they all safe without > cast_size_t_to_int()? > The return type should be implicitly converted back to int for all the locations its being called at. If implicit conversions are not encouraged I could change the types of the variables at the call sites? >> >> diff --git a/utf8.c b/utf8.c >> index 96460cc..1081573 100644 >> --- a/utf8.c >> +++ b/utf8.c >> @@ -208,7 +208,7 @@ int utf8_width(const char **start, size_t *remainder_p) >> * string, assuming that the string is utf8. Returns strlen() instead >> * if the string does not look like a valid utf8 string. >> */ >> -int utf8_strnwidth(const char *string, size_t len, int skip_ansi) >> +size_t utf8_strnwidth(const char *string, size_t len, int skip_ansi) >> { >> const char *orig = string; >> size_t width = 0; >> @@ -225,15 +225,10 @@ int utf8_strnwidth(const char *string, size_t len, int skip_ansi) >> if (glyph_width > 0) >> width += glyph_width; >> } >> - >> - /* >> - * TODO: fix the interface of this function and `utf8_strwidth()` to >> - * return `size_t` instead of `int`. >> - */ >> - return cast_size_t_to_int(string ? width : len); >> + return (string) ? width : len; > > Nit: Why the parentheses around "string"? > Bad habit I'll drop them in v2. Makes it obvious we are expecting a bool value here. >> } >> >> -int utf8_strwidth(const char *string) >> +size_t utf8_strwidth(const char *string) >> { >> return utf8_strnwidth(string, strlen(string), 0); >> } >> @@ -821,7 +816,7 @@ void strbuf_utf8_align(struct strbuf *buf, align_type position, unsigned int wid >> const char *s) >> { >> size_t slen = strlen(s); >> - int display_len = utf8_strnwidth(s, slen, 0); >> + size_t display_len = utf8_strnwidth(s, slen, 0); >> int utf8_compensation = slen - display_len; >> >> if (display_len >= width) { >> diff --git a/utf8.h b/utf8.h >> index cf8ecb0..531e968 100644 >> --- a/utf8.h >> +++ b/utf8.h >> @@ -7,8 +7,8 @@ typedef unsigned int ucs_char_t; /* assuming 32bit int */ >> >> size_t display_mode_esc_sequence_len(const char *s); >> int utf8_width(const char **start, size_t *remainder_p); >> -int utf8_strnwidth(const char *string, size_t len, int skip_ansi); >> -int utf8_strwidth(const char *string); >> +size_t utf8_strnwidth(const char *string, size_t len, int skip_ansi); >> +size_t utf8_strwidth(const char *string); >> int is_utf8(const char *text); >> int is_encoding_utf8(const char *name); >> int same_encoding(const char *, const char *); >> >> base-commit: 9a0c4701dcd5725c4184599322b52933ff5005ca