From: Father Chrysostomos Date: Fri, 30 Sep 2011 01:23:27 +0000 (-0700) Subject: toke.c: Take utf8 into account when creating DATA handle X-Git-Tag: accepted/trunk/20130322.191538~2492^2~33 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=affc13fc37d571176c2495208a3a38d42f0052f7;p=platform%2Fupstream%2Fperl.git toke.c: Take utf8 into account when creating DATA handle This is based on work from Brian Fraser, but differs from his original in that it does not require an intermediate SV. --- diff --git a/toke.c b/toke.c index 53c6759..c995556 100644 --- a/toke.c +++ b/toke.c @@ -6952,10 +6952,20 @@ Perl_yylex(pTHX) GV *gv; if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) { const char *pname = "main"; + STRLEN plen = 4; + U32 putf8 = 0; if (PL_tokenbuf[2] == 'D') - pname = HvNAME_get(PL_curstash ? PL_curstash : PL_defstash); - gv = gv_fetchpv(Perl_form(aTHX_ "%s::DATA", pname), GV_ADD, - SVt_PVIO); + { + HV * const stash = + PL_curstash ? PL_curstash : PL_defstash; + pname = HvNAME_get(stash); + plen = HvNAMELEN (stash); + if(HvNAMEUTF8(stash)) putf8 = SVf_UTF8; + } + gv = gv_fetchpvn_flags( + Perl_form(aTHX_ "%*s::DATA", (int)plen, pname), + plen+6, GV_ADD|putf8, SVt_PVIO + ); GvMULTI_on(gv); if (!GvIO(gv)) GvIOp(gv) = newIO();