Deprecate mg_length; make it return bytes
authorFather Chrysostomos <sprout@cpan.org>
Wed, 26 Sep 2012 22:20:52 +0000 (15:20 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 1 Oct 2012 19:51:51 +0000 (12:51 -0700)
commitbd8446cfdeebd0d46fb2f59b7a8ad1ef248ac0d3
treeace7e1e997d57a7d3244790bd83c72e3d1fe03f5
parent57e30c7a9fde9284d1ac854d4d6f97863ff461f5
Deprecate mg_length; make it return bytes

mg_length returns the number of bytes if a scalar has length magic,
but the number of characters otherwise.

sv_len_utf8 used to assume that mg_length would return bytes.  The
first mistake was added in commit b76347f2eb, which assumed that
mg_length would return characters.  But it was #ifdeffed out until
commit ffc61ed20e.

Later, commit 5636d518683 met sv_len_utf8’s assumptions by making
mg_length return the length in characters, without accounting for
sv_len, which also used mg_length.

So we ended up with a buggy sv_len that would return a character
count for scalars with get- but not length-magic, and a byte count
otherwise.

In the previous commit, I fixed sv_len not to use mg_length at all.  I
plan shortly to remove any use of mg_length (the one remaining use is
in sv_len_utf8, which is currently not called on magical values).

The reason for removing all calls to mg_length is that the returned
length cannot be converted to characters without access to the PV as
well, which requires get-magic.  So length magic on scalars makes no
sense since the advent of utf8.

This commit restore mg_length to its old behaviour and lists it as
deprecated.  This is mostly cosmetic, as there are no CPAN users.  But
it is in the API, and I don’t know whether we can easily remove it.
embed.fnc
mg.c
proto.h
t/porting/known_pod_issues.dat