diff options
author | Nicholas Clark <nick@ccl4.org> | 2005-10-30 08:51:52 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2005-10-30 08:51:52 +0000 |
commit | f95f476d3e4012b98bef777c4cf9fdc247d48d71 (patch) | |
tree | 41867d1d3e23c787aba173d672e97d173ee3d5a9 /mathoms.c | |
parent | a9f96b3fd8bd68e3c0062e4f23c142442340b0b5 (diff) | |
download | perl-f95f476d3e4012b98bef777c4cf9fdc247d48d71.tar.gz |
I think we have a winner. do_pipe hasn't been called since 4.036.
Maybe we should just remove this appendix.
p4raw-id: //depot/perl@25892
Diffstat (limited to 'mathoms.c')
-rw-r--r-- | mathoms.c | 46 |
1 files changed, 46 insertions, 0 deletions
@@ -652,6 +652,52 @@ Perl_do_exec(pTHX_ const char *cmd) } #endif +#ifdef HAS_PIPE +void +Perl_do_pipe(pTHX_ SV *sv, GV *rgv, GV *wgv) +{ + register IO *rstio; + register IO *wstio; + int fd[2]; + + if (!rgv) + goto badexit; + if (!wgv) + goto badexit; + + rstio = GvIOn(rgv); + wstio = GvIOn(wgv); + + if (IoIFP(rstio)) + do_close(rgv,FALSE); + if (IoIFP(wstio)) + do_close(wgv,FALSE); + + if (PerlProc_pipe(fd) < 0) + goto badexit; + IoIFP(rstio) = PerlIO_fdopen(fd[0], "r"PIPE_OPEN_MODE); + IoOFP(wstio) = PerlIO_fdopen(fd[1], "w"PIPE_OPEN_MODE); + IoOFP(rstio) = IoIFP(rstio); + IoIFP(wstio) = IoOFP(wstio); + IoTYPE(rstio) = IoTYPE_RDONLY; + IoTYPE(wstio) = IoTYPE_WRONLY; + if (!IoIFP(rstio) || !IoOFP(wstio)) { + if (IoIFP(rstio)) PerlIO_close(IoIFP(rstio)); + else PerlLIO_close(fd[0]); + if (IoOFP(wstio)) PerlIO_close(IoOFP(wstio)); + else PerlLIO_close(fd[1]); + goto badexit; + } + + sv_setsv(sv,&PL_sv_yes); + return; + +badexit: + sv_setsv(sv,&PL_sv_undef); + return; +} +#endif + /* * Local variables: * c-indentation-style: bsd |