summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2003-04-17 05:29:24 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2003-04-17 05:29:24 +0000
commit046e4a6af1e549ffcddd5421c8179b9ce3d443cd (patch)
tree8d893d3a5587628d5b4a98dda789781983ff96b0
parent4bb101f2758f169969171dfe6b70f68a406dcc1e (diff)
downloadperl-046e4a6af1e549ffcddd5421c8179b9ce3d443cd.tar.gz
Detect the 'fast stdio' case.
p4raw-id: //depot/perl@19243
-rw-r--r--lib/PerlIO.pm9
-rw-r--r--t/io/layers.t42
2 files changed, 41 insertions, 10 deletions
diff --git a/lib/PerlIO.pm b/lib/PerlIO.pm
index 24bc2b2b20..2deeea058b 100644
--- a/lib/PerlIO.pm
+++ b/lib/PerlIO.pm
@@ -204,7 +204,7 @@ translation for text files then the default layers are :
level layer.)
Otherwise if C<Configure> found out how to do "fast" IO using system's
-stdio, then the default layers are :
+stdio, then the default layers are:
unix stdio
@@ -243,11 +243,14 @@ DOS-like platforms and depending on the setting of the C<$ENV{PERLIO}>:
PERLIO UNIX-like DOS-like
- none or "" stdio unix crlf
- stdio stdio stdio
+ none or "" stdio [1] unix crlf
+ stdio stdio [1] stdio
perlio unix perlio unix perlio
mmap unix mmap unix mmap
+ # [1] If Configure found how to do "fast stdio",
+ # otherwise it will be "unix perlio".
+
By default the layers from the input side of the filehandle is
returned, to get the output side use the optional C<output> argument:
diff --git a/t/io/layers.t b/t/io/layers.t
index 7ba517a788..0e733ad994 100644
--- a/t/io/layers.t
+++ b/t/io/layers.t
@@ -1,5 +1,7 @@
#!./perl
+my $PERLIO;
+
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
@@ -15,14 +17,27 @@ BEGIN {
print "1..0 # PERLIO='$ENV{PERLIO}' unknown\n";
exit 0;
}
+ $PERLIO = exists $ENV{PERLIO} ? $ENV{PERLIO} : "(undef)";
}
plan tests => 43;
use Config;
-my $DOSISH = $^O =~ /^(?:MSWin32|cygwin|os2|dos|NetWare|mint)$/;
-my $NONSTDIO = exists $ENV{PERLIO} && $ENV{PERLIO} ne 'stdio';
+my $DOSISH = $^O =~ /^(?:MSWin32|cygwin|os2|dos|NetWare|mint)$/ ? 1 : 0;
+my $NONSTDIO = exists $ENV{PERLIO} && $ENV{PERLIO} ne 'stdio' ? 1 : 0;
+my $FASTSTDIO =
+ $Config{d_stdstdio} &&
+ $Config{d_stdio_ptr_lval} &&
+ ($Config{d_stdio_cnt_lval} ||
+ $Config{d_stdio_ptr_lval_sets_cnt}) ? 1 : 0;
+
+print <<__EOH__;
+# PERLIO = $PERLIO
+# DOSISH = $DOSISH
+# NONSTDIO = $NONSTDIO
+# FASTSTDIO = $FASTSTDIO
+__EOH__
SKIP: {
skip("This perl does not have Encode", 43)
@@ -35,19 +50,32 @@ SKIP: {
#
# PERLIO UNIX-like DOS-like
#
- # none or "" stdio unix crlf
- # stdio stdio stdio
+ # none or "" stdio [1] unix crlf
+ # stdio stdio [1] stdio
# perlio unix perlio unix perlio
# mmap unix mmap unix mmap
#
+ # [1] If Configure found how to do "fast stdio",
+ # otherwise it will be "unix perlio".
+ #
if ($NONSTDIO) {
# Get rid of "unix".
shift @$result if $result->[0] eq "unix";
# Change expectations.
- $expected->[0] = $ENV{PERLIO} if $expected->[0] eq "stdio";
+ if ($FASTSTDIO) {
+ $expected->[0] = $ENV{PERLIO};
+ } else {
+ $expected->[0] = $ENV{PERLIO} if $expected->[0] eq "stdio";
+ }
+ } elsif (!$FASTSTDIO) {
+ splice(@$result, 0, 2, "stdio")
+ if @$result >= 2 &&
+ $result->[0] eq "unix" &&
+ $result->[1] eq "perlio";
} elsif ($DOSISH) {
splice(@$result, 0, 2, "stdio")
- if $result->[0] eq "unix" &&
+ if @$result >= 2 &&
+ $result->[0] eq "unix" &&
$result->[1] eq "crlf";
}
my $n = scalar @$expected;
@@ -120,7 +148,7 @@ SKIP: {
binmode(F, ":raw :encoding(latin1)"); # "latin1" will be canonized
SKIP: {
- skip("too complex layer coreography", 7) if $DOSISH;
+ skip("too complex layer coreography", 7) if $DOSISH || !$FASTSTDIO;
my @results = PerlIO::get_layers(F, details => 1);