Make sv_len_utf8 return a character count as documented
authorFather Chrysostomos <sprout@cpan.org>
Thu, 27 Sep 2012 03:39:55 +0000 (20:39 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 1 Oct 2012 19:51:52 +0000 (12:51 -0700)
commitc9d50bb49b0231aa883d3d0293ef039845f50237
treeeaaa2956d1409307fbf2aaf0c258be49bd27c193
parenta8b0c4535f00ce3e66877fa1cc6100dea2e74eab
Make sv_len_utf8 return a character count as documented

Brought up in ticket #114690.

sv_len_utf8 does not make sense.  It assumes that the string is UTF-8.
If it is not, it just does the wrong thing.  For magical variables, it
expects mg_length to return the number of characters, but it would
only sometimes do that until the previous commit, which restored it to
returning  bytes for all scalars.

Since you have to know already that a string is in utf8 before you
can call sv_len_utf8, but sv_len_utf8 might call get-magic which will
change the utf8-ness, it really makes no sense as an API.  Up till
now, it has been consistently buggy with any magic scalars.

So I have changed sv_len_utf8 to do exactly what the documentation
says: return the number of characters.

This also causes an existing buggy code path in sv_len_utf8_nomg to be
reached (SvCUR without checking SvPOK), so this fixes that too.
sv.c