summaryrefslogtreecommitdiff
path: root/doio.c
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>1999-07-26 02:11:31 +0000
committerGurusamy Sarathy <gsar@cpan.org>1999-07-26 02:11:31 +0000
commitf2b5be74500fffd3dc232fca7cb3c51bc3b9abf9 (patch)
tree4ca90dcb7912cdbeb031dd0bba3a9b3f5b55ef72 /doio.c
parenta682de96b5260e75b40bb25b8d2eb16f338518c6 (diff)
downloadperl-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.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/doio.c b/doio.c
index d55acb1280..880997c887 100644
--- a/doio.c
+++ b/doio.c
@@ -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);
}