Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Question about mb_metastrlen
On Tue, 27 Oct 2015 09:31:02 +0100
Sebastian Gniazdowski <sgniazdowski@xxxxxxxxx> wrote:
> Hello,
> the function counts bytes in last incomplete wide character:
>
> ret = mbrtowc(&wc, &inchar, 1, &mb_shiftstate);
> if (ret == MB_INCOMPLETE) {
> num_in_char++;
> } else {
>
> When returning, it makes use of the count:
>
> /* If incomplete, treat remainder as trailing single bytes */
> return num + num_in_char;
>
> Strings are stored in wchar_t arrays. The incomplete character will
> occupy single index, correct? So maybe the return should be:
>
> return num + ( num_in_char > 0 ? 1 : 0 );
The function you're talking about is for a string length, not a
character length. num_in_char counts the number of trailing bytes that
didn't form a wide character. Each will be treated as a single byte.
So each counts 1 for the length of the string.
I think your answer would be correct for a function that counts just the
next character (i.e. mb_metacharlenconv()), but I think that's already doing
what you'd expect in that case.
That's the intention of the function, anyway, but if you can see a use
that's inconsistent with it there could be a bug there.
pws
Messages sorted by:
Reverse Date,
Date,
Thread,
Author