Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- > utf8.c | 20 ++++++++++++++------ > utf8.h | 1 + > 2 files changed, 15 insertions(+), 6 deletions(-) > > diff --git a/utf8.c b/utf8.c > index 82c2ddf..38322a1 100644 > --- a/utf8.c > +++ b/utf8.c > @@ -266,18 +266,26 @@ 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_strwidth(const char *string) > +int utf8_strnwidth(const char *string, int len, int skip_ansi) > { > int width = 0; > const char *orig = string; > > - while (1) { > - if (!string) > - return strlen(orig); > - if (!*string) > - return width; > + if (len == -1) > + len = strlen(string); > + while (string && string < orig + len) { > + int skip; > + while (skip_ansi && > + (skip = display_mode_esc_sequence_len(string))) We prefer to avoid assignment in conditionals; please write the second as something like: ((var = func(...)) != 0) to clarify that it is not a misspelled comparison. > + string += skip; > width += utf8_width(&string, NULL); > } > + return string ? width : len; > +} > + > +int utf8_strwidth(const char *string) > +{ > + return utf8_strnwidth(string, -1, 0); > } > > int is_utf8(const char *text) > diff --git a/utf8.h b/utf8.h > index 501b2bd..a556932 100644 > --- a/utf8.h > +++ b/utf8.h > @@ -4,6 +4,7 @@ > typedef unsigned int ucs_char_t; /* assuming 32bit int */ > > int utf8_width(const char **start, size_t *remainder_p); > +int utf8_strnwidth(const char *string, int len, int skip_ansi); > int utf8_strwidth(const char *string); > int is_utf8(const char *text); > int is_encoding_utf8(const char *name); -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html