summaryrefslogtreecommitdiff
path: root/lib/open.t
diff options
context:
space:
mode:
authorTony Cook <tony@develop-help.com>2018-09-25 11:18:40 +1000
committerTony Cook <tony@develop-help.com>2018-10-10 11:12:13 +1100
commit1ed4b7762a858fb9c71bc209fe868060f3774cb5 (patch)
treed7fd59a4d3f823d2d46530e79be9da4dff4f2b64 /lib/open.t
parent03b94aa47e981af3c7b0118bfb11facda2b95251 (diff)
downloadperl-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.t122
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)