diff options
author | Brian Fraser <fraserbn@gmail.com> | 2011-07-23 18:48:51 -0300 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2011-10-06 13:01:11 -0700 |
commit | aa33328e822d3a36d7448488403f30a991f148b2 (patch) | |
tree | 9a8e363512bd09e04461688a7c94b2f4247c33a1 /util.c | |
parent | 072cb3f51939df5a0454482dcc0e528fbf137880 (diff) | |
download | perl-aa33328e822d3a36d7448488403f30a991f148b2.tar.gz |
util.c for threads: stashpv_hvname_match UTF8 cleanup.
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 23 |
1 files changed, 16 insertions, 7 deletions
@@ -5827,16 +5827,25 @@ Perl_get_hash_seed(pTHX) bool Perl_stashpv_hvname_match(pTHX_ const COP *c, const HV *hv) { - const char * const stashpv = CopSTASHPV(c); - const char * const name = HvNAME_get(hv); + const char * stashpv = CopSTASHPV(c); + const char * name = HvNAME_get(hv); PERL_UNUSED_CONTEXT; PERL_ARGS_ASSERT_STASHPV_HVNAME_MATCH; - if (stashpv == name) - return TRUE; - if (stashpv && name) - if (strEQ(stashpv, name)) - return TRUE; + if ( HvNAMEUTF8(hv) && !(CopSTASH_flags(c) & SVf_UTF8 ? 1 : 0) ) { + if (CopSTASH_flags(c) & SVf_UTF8) { + return (bytes_cmp_utf8( + (const U8*)stashpv, strlen(stashpv), + (const U8*)name, HEK_LEN(HvNAME_HEK(hv))) == 0); + } else { + return (bytes_cmp_utf8( + (const U8*)name, HEK_LEN(HvNAME_HEK(hv)), + (const U8*)stashpv, strlen(stashpv)) == 0); + } + } + else + return (stashpv == name + || strEQ(stashpv, name)); return FALSE; } #endif |