skip_all("fork required to pipe");
}
else {
- plan(tests => 22);
+ plan(tests => 24);
}
}
SKIP: {
# Technically this should be TODO. Someone try it if you happen to
# have a vmesa machine.
- skip "Doesn't work here yet", 4 if $^O eq 'vmesa';
+ skip "Doesn't work here yet", 6 if $^O eq 'vmesa';
if (open(PIPE, "-|")) {
while(<PIPE>) {
# This has to be *outside* the fork
next_test() for 1..2;
+ my $raw = "abc\nrst\rxyz\r\nfoo\n";
+ if (open(PIPE, "-|")) {
+ $_ = join '', <PIPE>;
+ (my $raw1 = $_) =~ s/not ok \d+ - //;
+ my @r = map ord, split //, $raw;
+ my @r1 = map ord, split //, $raw1;
+ if ($raw1 eq $raw) {
+ s/^not (ok \d+ -) .*/$1 '@r1' passes through '-|'\n/s;
+ } else {
+ s/^(not ok \d+ -) .*/$1 expect '@r', got '@r1'\n/s;
+ }
+ print;
+ close PIPE; # avoid zombies
+ }
+ else {
+ printf STDOUT "not ok %d - $raw", curr_test();
+ exec $Perl, '-e0'; # Do not run END()...
+ }
+
+ # This has to be *outside* the fork
+ next_test();
+
+ if (open(PIPE, "|-")) {
+ printf PIPE "not ok %d - $raw", curr_test();
+ close PIPE; # avoid zombies
+ }
+ else {
+ $_ = join '', <STDIN>;
+ (my $raw1 = $_) =~ s/not ok \d+ - //;
+ my @r = map ord, split //, $raw;
+ my @r1 = map ord, split //, $raw1;
+ if ($raw1 eq $raw) {
+ s/^not (ok \d+ -) .*/$1 '@r1' passes through '|-'\n/s;
+ } else {
+ s/^(not ok \d+ -) .*/$1 expect '@r', got '@r1'\n/s;
+ }
+ print;
+ exec $Perl, '-e0'; # Do not run END()...
+ }
+
+ # This has to be *outside* the fork
+ next_test();
+
SKIP: {
skip "fork required", 2 unless $Config{d_fork};
PerlProc__exit(1);
}
#endif /* defined OS2 */
+
+#ifdef PERLIO_USING_CRLF
+ /* Since we circumvent IO layers when we manipulate low-level
+ filedescriptors directly, need to manually switch to the
+ default, binary, low-level mode; see PerlIOBuf_open(). */
+ PerlLIO_setmode((*mode == 'r'), O_BINARY);
+#endif
+
if ((tmpgv = gv_fetchpvs("$", GV_ADD|GV_NOTQUAL, SVt_PV))) {
SvREADONLY_off(GvSV(tmpgv));
sv_setiv(GvSV(tmpgv), PerlProc_getpid());