summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorNick Ing-Simmons <nik@tiuk.ti.com>2002-02-11 11:59:18 +0000
committerNick Ing-Simmons <nik@tiuk.ti.com>2002-02-11 11:59:18 +0000
commit25f7d9d365e0d370c3b5dfc8fdfd572718a96a04 (patch)
tree8977ca0a03f997de83acc9b20def70f323c2131e /ext
parent0a95303c57acf5bd500b4d1b2412c87bb5a227e6 (diff)
downloadperl-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.xs12
-rw-r--r--ext/Encode/t/Japanese.t2
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));