summaryrefslogtreecommitdiff
path: root/ext/PerlIO-scalar/scalar.xs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/PerlIO-scalar/scalar.xs')
-rw-r--r--ext/PerlIO-scalar/scalar.xs7
1 files changed, 7 insertions, 0 deletions
diff --git a/ext/PerlIO-scalar/scalar.xs b/ext/PerlIO-scalar/scalar.xs
index f2481f4197..b93b9e9257 100644
--- a/ext/PerlIO-scalar/scalar.xs
+++ b/ext/PerlIO-scalar/scalar.xs
@@ -47,9 +47,15 @@ PerlIOScalar_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg,
SvUPGRADE(s->var, SVt_PV);
code = PerlIOBase_pushed(aTHX_ f, mode, Nullsv, tab);
if (!SvOK(s->var) || (PerlIOBase(f)->flags) & PERLIO_F_TRUNCATE)
+ {
+ sv_force_normal(s->var);
SvCUR_set(s->var, 0);
+ }
if ((PerlIOBase(f)->flags) & PERLIO_F_APPEND)
+ {
+ sv_force_normal(s->var);
s->posn = SvCUR(s->var);
+ }
else
s->posn = 0;
SvSETMAGIC(s->var);
@@ -166,6 +172,7 @@ PerlIOScalar_write(pTHX_ PerlIO * f, const void *vbuf, Size_t count)
SV *sv = s->var;
char *dst;
SvGETMAGIC(sv);
+ sv_force_normal(sv);
if ((PerlIOBase(f)->flags) & PERLIO_F_APPEND) {
dst = SvGROW(sv, SvCUR(sv) + count);
offset = SvCUR(sv);