diff options
author | Peter Stephenson <p.stephenson@samsung.com> | 2019-07-02 13:42:53 +0100 |
---|---|---|
committer | Peter Stephenson <p.stephenson@samsung.com> | 2019-07-02 13:42:53 +0100 |
commit | 3bdf4d6641fb34d1c2f130abddb847169a793afe (patch) | |
tree | b1c3686749a26212f08bfd8ffea464804f308d86 /Src/exec.c | |
parent | 700ec49581650ea1f0bffacb207a30145e278417 (diff) | |
download | zsh-3bdf4d6641fb34d1c2f130abddb847169a793afe.tar.gz zsh-3bdf4d6641fb34d1c2f130abddb847169a793afe.tar.xz zsh-3bdf4d6641fb34d1c2f130abddb847169a793afe.zip |
44480: Don't automatically close externally visible file descroptors.
These are descriptors marked FDT_EXTERNAL. Make all sysopen'ed file descriptors FDT_EXTERNAL. Make =(...) call closem() consistent with other substitutions. Document file descriptors are left open.
Diffstat (limited to 'Src/exec.c')
-rw-r--r-- | Src/exec.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/Src/exec.c b/Src/exec.c index 60ab0acf8..2acb2c0bc 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -4407,8 +4407,10 @@ closem(int how, int all) /* * Process substitution needs to be visible to user; * fd's are explicitly cleaned up by filelist handling. + * External FDs are managed directly by the user. */ - (all || fdtable[i] != FDT_PROC_SUBST) && + (all || (fdtable[i] != FDT_PROC_SUBST && + fdtable[i] != FDT_EXTERNAL)) && (how == FDT_UNUSED || (fdtable[i] & FDT_TYPE_MASK) == how)) { if (i == SHTTY) SHTTY = -1; @@ -4823,6 +4825,7 @@ getoutputfile(char *cmd, char **eptr) } /* pid == 0 */ + closem(FDT_UNUSED, 0); redup(fd, 1); entersubsh(ESUB_PGRP|ESUB_NOMONITOR, NULL); cmdpush(CS_CMDSUBST); |