diff options
author | Nicholas Clark <nick@ccl4.org> | 2004-07-12 21:36:51 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2004-07-12 21:36:51 +0000 |
commit | d6e8a19203a9e1ef15ec2b593c075d7c70ec05da (patch) | |
tree | 8194acf827d8aedd139786095fb74d222ba4e078 | |
parent | 65f55033b37274f1c98d7ded95c208752a2a0d82 (diff) | |
download | perl-d6e8a19203a9e1ef15ec2b593c075d7c70ec05da.tar.gz |
Integrate:
[ 23076]
Perl_mode_from_discipline must update len. (else SEGV)
Diagnosis and patch from clkao
[ 23083]
Perl_is_utf8_string(pTHX_ U8 *s, STRLEN len)
Can now handle the case
is_utf8_string(NULL,0)
again.
Why do we have code dup for Perl_is_utf8_string_loc() ?
[ 23084]
NI-S: IMHO utf8_upgrade is just changing representation not the value
so it has no business calling SvSETMAGIC.
[ 23085]
Bodge to make Tk work - like the UTF8 flag, the READONLY flag has too
many meanings. const const vs mutable in this case.
p4raw-link: @23085 on //depot/perl: d52b7888e9c3eb0ccb038b7c44075ba28e8fefa6
p4raw-link: @23084 on //depot/perl: 7a5fa8a2cb05d06ee722842024d6960f349f483b
p4raw-link: @23083 on //depot/perl: 61468b033262a3098f06f5437d4f3f1f301cacb3
p4raw-link: @23076 on //depot/perl: 18a33fb59fd6afeb2aae93e4a139e231623b401f
p4raw-id: //depot/maint-5.8/perl@23087
p4raw-edited: from //depot/perl@23086 'edit in' sv.c (@23084..)
p4raw-integrated: from //depot/perl@23086 'copy in' utf8.c (@22764..)
'merge in' doio.c (@22741..)
-rw-r--r-- | doio.c | 1 | ||||
-rw-r--r-- | sv.c | 10 | ||||
-rw-r--r-- | utf8.c | 4 |
3 files changed, 10 insertions, 5 deletions
@@ -1172,6 +1172,7 @@ fail_discipline: #ifndef PERLIO_LAYERS Perl_croak(aTHX_ "IO layers (like '%.*s') unavailable", end-s, s); #else + len -= end-s; s = end; #endif } @@ -3451,11 +3451,16 @@ Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags) return 0; if (!SvPOK(sv)) { STRLEN len = 0; - (void) SvPV_force(sv,len); + if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) { + (void) sv_2pv_flags(sv,&len, flags); + if (SvUTF8(sv)) + return len; + } else { + (void) SvPV_force(sv,len); + } } if (SvUTF8(sv)) { - SvSETMAGIC(sv); return SvCUR(sv); } @@ -3492,7 +3497,6 @@ Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags) /* Mark as UTF-8 even if no hibit - saves scanning loop */ SvUTF8_on(sv); } - SvSETMAGIC(sv); return SvCUR(sv); } @@ -232,7 +232,7 @@ Perl_is_utf8_string(pTHX_ U8 *s, STRLEN len) U8* send; STRLEN c; - if (!len) + if (!len && s) len = strlen((char *)s); send = s + len; @@ -272,7 +272,7 @@ Perl_is_utf8_string_loc(pTHX_ U8 *s, STRLEN len, U8 **p) U8* send; STRLEN c; - if (!len) + if (!len && s) len = strlen((char *)s); send = s + len; |