diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 1999-07-26 02:11:31 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1999-07-26 02:11:31 +0000 |
commit | f2b5be74500fffd3dc232fca7cb3c51bc3b9abf9 (patch) | |
tree | 4ca90dcb7912cdbeb031dd0bba3a9b3f5b55ef72 /doio.c | |
parent | a682de96b5260e75b40bb25b8d2eb16f338518c6 (diff) | |
download | perl-f2b5be74500fffd3dc232fca7cb3c51bc3b9abf9.tar.gz |
ensure implicitly closed handles don't set $? or $!
p4raw-id: //depot/perl@3752
Diffstat (limited to 'doio.c')
-rw-r--r-- | doio.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -675,7 +675,7 @@ Perl_do_close(pTHX_ GV *gv, bool not_implicit) } return FALSE; } - retval = io_close(io); + retval = io_close(io, not_implicit); if (not_implicit) { IoLINES(io) = 0; IoPAGE(io) = 0; @@ -686,7 +686,7 @@ Perl_do_close(pTHX_ GV *gv, bool not_implicit) } bool -Perl_io_close(pTHX_ IO *io) +Perl_io_close(pTHX_ IO *io, bool not_implicit) { bool retval = FALSE; int status; @@ -694,8 +694,13 @@ Perl_io_close(pTHX_ IO *io) if (IoIFP(io)) { if (IoTYPE(io) == '|') { status = PerlProc_pclose(IoIFP(io)); - STATUS_NATIVE_SET(status); - retval = (STATUS_POSIX == 0); + if (not_implicit) { + STATUS_NATIVE_SET(status); + retval = (STATUS_POSIX == 0); + } + else { + retval = (status != -1); + } } else if (IoTYPE(io) == '-') retval = TRUE; @@ -709,7 +714,7 @@ Perl_io_close(pTHX_ IO *io) } IoOFP(io) = IoIFP(io) = Nullfp; } - else { + else if (not_implicit) { SETERRNO(EBADF,SS$_IVCHAN); } |