diff options
author | Nick Ing-Simmons <nik@tiuk.ti.com> | 2002-02-11 11:59:18 +0000 |
---|---|---|
committer | Nick Ing-Simmons <nik@tiuk.ti.com> | 2002-02-11 11:59:18 +0000 |
commit | 25f7d9d365e0d370c3b5dfc8fdfd572718a96a04 (patch) | |
tree | 8977ca0a03f997de83acc9b20def70f323c2131e /ext | |
parent | 0a95303c57acf5bd500b4d1b2412c87bb5a227e6 (diff) | |
download | perl-25f7d9d365e0d370c3b5dfc8fdfd572718a96a04.tar.gz |
Patch up the failing multi-byte write case, and un-skip
the test.
p4raw-id: //depot/perlio@14639
Diffstat (limited to 'ext')
-rw-r--r-- | ext/Encode/Encode.xs | 12 | ||||
-rw-r--r-- | ext/Encode/t/Japanese.t | 2 |
2 files changed, 13 insertions, 1 deletions
diff --git a/ext/Encode/Encode.xs b/ext/Encode/Encode.xs index 4d6c6ac6be..4e36a49583 100644 --- a/ext/Encode/Encode.xs +++ b/ext/Encode/Encode.xs @@ -328,6 +328,11 @@ PerlIOEncode_flush(pTHX_ PerlIO * f) if (PerlIO_flush(PerlIONext(f)) != 0) { code = -1; } + if (SvCUR(e->bufsv)) { + /* Did not all translate */ + e->base.ptr = e->base.buf+SvCUR(e->bufsv); + return code; + } } else if (PerlIOBase(f)->flags & PERLIO_F_RDBUF) { /* read case */ @@ -384,6 +389,9 @@ PerlIOEncode_close(pTHX_ PerlIO * f) PerlIOEncode *e = PerlIOSelf(f, PerlIOEncode); IV code = PerlIOBase_close(aTHX_ f); if (e->bufsv) { + if (e->base.buf && e->base.ptr > e->base.buf) { + Perl_croak(aTHX_ "Close with partial character"); + } SvREFCNT_dec(e->bufsv); e->bufsv = Nullsv; } @@ -402,6 +410,9 @@ PerlIOEncode_tell(pTHX_ PerlIO * f) the UTF8 we have in bufefr and then ask layer below */ PerlIO_flush(f); + if (b->buf && b->ptr > b->buf) { + Perl_croak(aTHX_ "Cannot tell at partial character"); + } return PerlIO_tell(PerlIONext(f)); } @@ -470,6 +481,7 @@ Encode_XSEncoding(pTHX_ encode_t * enc) void call_failure(SV * routine, U8 * done, U8 * dest, U8 * orig) { + /* Exists for breakpointing */ } static SV * diff --git a/ext/Encode/t/Japanese.t b/ext/Encode/t/Japanese.t index d6fa824d49..20f5b2523a 100644 --- a/ext/Encode/t/Japanese.t +++ b/ext/Encode/t/Japanese.t @@ -70,7 +70,7 @@ select($out); SKIP: { - skip "Multi-byte write is broken",3; + #skip "Multi-byte write is broken",3; print "# dst :encoding test\n"; open(my $src,"<:utf8",$ref) || die "Cannot open $ref:$!"; ok(defined($src) || fileno($src)); |