From aa33328e822d3a36d7448488403f30a991f148b2 Mon Sep 17 00:00:00 2001 From: Brian Fraser Date: Sat, 23 Jul 2011 18:48:51 -0300 Subject: [PATCH] util.c for threads: stashpv_hvname_match UTF8 cleanup. --- util.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/util.c b/util.c index 82d75904bda4..113cd179da7c 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