IV PerlIOScalar_close(pTHX_ PerlIO * f) { IV code = PerlIOBase_close(aTHX_ f); PerlIOBase(f)->flags &= ~(PERLIO_F_RDBUF | PERLIO_F_WRBUF); return code; }
IV PerlIOEncode_close(pTHX_ PerlIO * f) { PerlIOEncode *e = PerlIOSelf(f, PerlIOEncode); IV code; if (PerlIOBase(f)->flags & PERLIO_F_RDBUF) { /* Discard partial character */ if (e->dataSV) { SvCUR_set(e->dataSV,0); } /* Don't back decode and unread any pending data */ e->base.ptr = e->base.end = e->base.buf; } code = PerlIOBase_close(aTHX_ f); if (e->bufsv) { /* This should only fire for write case */ if (e->base.buf && e->base.ptr > e->base.buf) { Perl_croak(aTHX_ "Close with partial character"); } SvREFCNT_dec(e->bufsv); e->bufsv = Nullsv; } e->base.buf = NULL; e->base.ptr = NULL; e->base.end = NULL; PerlIOBase(f)->flags &= ~(PERLIO_F_RDBUF | PERLIO_F_WRBUF); return code; }