From: Torsten Bögershausen Date: Wed, 05 Sep 2012 19:20:34 GMT Subject: Re: [PATCH v2] fetch: align new ref summary printout in UTF-8 locales Message-ID: <5047A602.1020802@web.de> In-Reply-To: <504796A5.4070700@gmail.com> On 09/05/2012 08:15 PM, Torsten Bögershausen wrote: > On 04.09.12 12:39, Nguyễn Thái Ngọc Duy wrote: >> +/* return the number of columns of string 's' in current locale */ >> +int gettext_width(const char *s) >> +{ >> + static int is_utf8 = -1; >> + if (is_utf8 == -1) >> + is_utf8 = !strcmp(charset, "UTF-8"); >> + >> + return is_utf8 ? utf8_strwidth(s) : strlen(s); > > Will that work for non-ASCII encodings? > For ISO-8859-x we can say strlen() == strwidth(), > but for other encodings using multibytes that doesn't work, does it? (Sorry the message went out before completely written) Something like that: int gettext_width(const char *s) { static int is_utf8 = -1; if (is_utf8 == -1) is_utf8 = !strcmp(charset, "UTF-8"); if (is_utf8) return utf8_strwidth(s); else { char *s_utf = reencode_string(s, "UTF-8", charset); if (s_utf) { witdh = utf8_strwidth(s_utf); free(s_utf); } else width = strlen(s); return width; }