diff --git a/src/cmd/ksh93/sh/io.c b/src/cmd/ksh93/sh/io.c index 5db81ba3e..fc88cb0bc 100644 --- a/src/cmd/ksh93/sh/io.c +++ b/src/cmd/ksh93/sh/io.c @@ -1045,9 +1045,9 @@ static Sfoff_t file_offset(int fn, char *fname) */ void sh_pclose(register int pv[]) { - if(pv[0]>=2) + if(pv[0] > -1) sh_close(pv[0]); - if(pv[1]>=2) + if(pv[1] > -1) sh_close(pv[1]); pv[0] = pv[1] = -1; } diff --git a/src/cmd/ksh93/sh/jobs.c b/src/cmd/ksh93/sh/jobs.c index 27abc493b..0d55fe9b4 100644 --- a/src/cmd/ksh93/sh/jobs.c +++ b/src/cmd/ksh93/sh/jobs.c @@ -396,10 +396,11 @@ int job_reap(register int sig) /* check for coprocess completion */ if(pid==sh.cpid) { - sh_close(sh.coutpipe); - sh_close(sh.cpipe[1]); - sh.cpipe[1] = -1; - sh.coutpipe = -1; + if(sh.coutpipe > -1) + sh_close(sh.coutpipe); + if(sh.cpipe[1] > -1) + sh_close(sh.cpipe[1]); + sh.coutpipe = sh.cpipe[1] = -1; } else if(sh.subshell) sh_subjobcheck(pid); diff --git a/src/cmd/ksh93/sh/path.c b/src/cmd/ksh93/sh/path.c index e3bda4046..363a1debf 100644 --- a/src/cmd/ksh93/sh/path.c +++ b/src/cmd/ksh93/sh/path.c @@ -1275,10 +1275,13 @@ static noreturn void exscript(register char *path,register char *argv[],char **e sh.bckpid = 0; sh.st.ioset=0; /* clean up any cooperating processes */ - if(sh.cpipe[0]>0) + if(sh.cpipe[0] > -1) sh_pclose(sh.cpipe); - if(sh.cpid && sh.outpipe) + if(sh.cpid && sh.outpipe && *sh.outpipe > -1) + { sh_close(*sh.outpipe); + *sh.outpipe = -1; + } sh.cpid = 0; if(sp=fcfile()) while(sfstack(sp,SF_POPSTACK)); diff --git a/src/cmd/ksh93/sh/subshell.c b/src/cmd/ksh93/sh/subshell.c index 05dbdf2cd..92b2a78a7 100644 --- a/src/cmd/ksh93/sh/subshell.c +++ b/src/cmd/ksh93/sh/subshell.c @@ -455,8 +455,10 @@ void sh_subjobcheck(pid_t pid) { if(sp->cpid==pid) { - sh_close(sp->coutpipe); - sh_close(sp->cpipe); + if(sp->coutpipe > -1) + sh_close(sp->coutpipe); + if(sp->cpipe > -1) + sh_close(sp->cpipe); sp->coutpipe = sp->cpipe = -1; return; }