diff options
author | Tony Cook <tony@develop-help.com> | 2018-09-25 11:18:40 +1000 |
---|---|---|
committer | Tony Cook <tony@develop-help.com> | 2018-10-10 11:12:13 +1100 |
commit | 1ed4b7762a858fb9c71bc209fe868060f3774cb5 (patch) | |
tree | d7fd59a4d3f823d2d46530e79be9da4dff4f2b64 /lib/open.t | |
parent | 03b94aa47e981af3c7b0118bfb11facda2b95251 (diff) | |
download | perl-1ed4b7762a858fb9c71bc209fe868060f3774cb5.tar.gz |
(perl #125760) fatalize sysread/syswrite/recv/send on :utf8 handles
This includes removing the :utf8 logic from pp_syswrite. pp_sysread
retains it, since it's also used for read().
Tests that are specifically testing the behaviour against :utf8
handles have been removed (eg in lib/open.t), several other tests
that incidentally used those functions on :utf8 handles have been
adapted to use :raw handles instead (eg. op/readline.t).
Test lib/sigtrap.t fails if STDERR is :utf8, in code from the
original 5.000 commit, which is intended to run in a signal handler
Diffstat (limited to 'lib/open.t')
-rw-r--r-- | lib/open.t | 122 |
1 files changed, 1 insertions, 121 deletions
diff --git a/lib/open.t b/lib/open.t index 5150c7f8a2..fa17f1a97c 100644 --- a/lib/open.t +++ b/lib/open.t @@ -8,7 +8,7 @@ BEGIN { require './charset_tools.pl'; } -plan 23; +plan 11; # open::import expects 'open' as its first argument, but it clashes with open() sub import { @@ -62,126 +62,6 @@ is( ${^OPEN}, ":raw :crlf\0:raw :crlf", is( $^H{'open_IO'}, 'crlf', 'should record last layer set in %^H' ); SKIP: { - skip("no perlio, no :utf8", 12) unless (find PerlIO::Layer 'perlio'); - - eval <<EOE; - use open ':utf8'; - open(O, ">utf8"); - print O chr(0x100); - close O; - open(I, "<utf8"); - is(ord(<I>), 0x100, ":utf8 single wide character round-trip"); - close I; -EOE - - open F, ">a"; - @a = map { chr(1 << ($_ << 2)) } 0..5; # 0x1, 0x10, .., 0x100000 - unshift @a, chr(0); # ... and a null byte in front just for fun - print F @a; - close F; - - sub systell { - use Fcntl 'SEEK_CUR'; - sysseek($_[0], 0, SEEK_CUR); - } - - require bytes; # not use - - my $ok; - - open F, "<:utf8", "a"; - $ok = $a = 0; - for (@a) { - unless ( - ($c = sysread(F, $b, 1)) == 1 && - length($b) == 1 && - ord($b) == ord($_) && - systell(F) == ($a += bytes::length($b)) - ) { - print '# ord($_) == ', ord($_), "\n"; - print '# ord($b) == ', ord($b), "\n"; - print '# length($b) == ', length($b), "\n"; - print '# bytes::length($b) == ', bytes::length($b), "\n"; - print '# systell(F) == ', systell(F), "\n"; - print '# $a == ', $a, "\n"; - print '# $c == ', $c, "\n"; - last; - } - $ok++; - } - close F; - ok($ok == @a, - "on :utf8 streams sysread() should work on characters, not bytes"); - - sub diagnostics { - print '# ord($_) == ', ord($_), "\n"; - print '# bytes::length($_) == ', bytes::length($_), "\n"; - print '# systell(G) == ', systell(G), "\n"; - print '# $a == ', $a, "\n"; - print '# $c == ', $c, "\n"; - } - - - my %actions = ( - syswrite => sub { syswrite G, shift; }, - 'syswrite len' => sub { syswrite G, shift, 1; }, - 'syswrite len pad' => sub { - my $temp = shift() . "\243"; - syswrite G, $temp, 1; }, - 'syswrite off' => sub { - my $temp = "\351" . shift(); - syswrite G, $temp, 1, 1; }, - 'syswrite off pad' => sub { - my $temp = "\351" . shift() . "\243"; - syswrite G, $temp, 1, 1; }, - ); - - foreach my $key (sort keys %actions) { - # syswrite() on should work on characters, not bytes - open G, ">:utf8", "b"; - - print "# $key\n"; - $ok = $a = 0; - for (@a) { - unless ( - ($c = $actions{$key}($_)) == 1 && - systell(G) == ($a += bytes::length($_)) - ) { - diagnostics(); - last; - } - $ok++; - } - close G; - ok($ok == @a, - "on :utf8 streams syswrite() should work on characters, not bytes"); - - open G, "<:utf8", "b"; - $ok = $a = 0; - for (@a) { - unless ( - ($c = sysread(G, $b, 1)) == 1 && - length($b) == 1 && - ord($b) == ord($_) && - systell(G) == ($a += bytes::length($_)) - ) { - print '# ord($_) == ', ord($_), "\n"; - print '# ord($b) == ', ord($b), "\n"; - print '# length($b) == ', length($b), "\n"; - print '# bytes::length($b) == ', bytes::length($b), "\n"; - print '# systell(G) == ', systell(G), "\n"; - print '# $a == ', $a, "\n"; - print '# $c == ', $c, "\n"; - last; - } - $ok++; - } - close G; - ok($ok == @a, - "checking syswrite() output on :utf8 streams by reading it back in"); - } -} -SKIP: { skip("no perlio", 1) unless (find PerlIO::Layer 'perlio'); skip("no Encode", 1) unless $Config{extensions} =~ m{\bEncode\b}; skip("EBCDIC platform doesnt have 'use encoding' used by open ':locale'", 1) |