summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorBrian Fraser <fraserbn@gmail.com>2011-07-23 18:48:51 -0300
committerFather Chrysostomos <sprout@cpan.org>2011-10-06 13:01:11 -0700
commitaa33328e822d3a36d7448488403f30a991f148b2 (patch)
tree9a8e363512bd09e04461688a7c94b2f4247c33a1 /util.c
parent072cb3f51939df5a0454482dcc0e528fbf137880 (diff)
downloadperl-aa33328e822d3a36d7448488403f30a991f148b2.tar.gz
util.c for threads: stashpv_hvname_match UTF8 cleanup.
Diffstat (limited to 'util.c')
-rw-r--r--util.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/util.c b/util.c
index 82d75904bd..113cd179da 100644
--- a/util.c
+++ b/util.c
@@ -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