From e6d964246700581fe22ea834b2ea12dd301e8c3d Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Tue, 20 Jan 2015 09:29:22 +0000 Subject: users/19751: remove error on failure to close file descriptor by number. Keep it when closing file descriptor stored in a variable, i.e. explicitly opened by the user. --- ChangeLog | 6 ++++++ Src/exec.c | 7 ++++++- Test/A04redirect.ztst | 10 ++++++---- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5d52f6693..8751e93f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-01-20 Peter Stephenson + + * users/19751: Src/exec.c, Test/A04redirect.ztst: remove error + on closing file descriptors via number but keep it for those + controlled by variable. + 2015-01-18 Peter Stephenson * 34322: Src/Zle/compctl.c, Src/Zle/compresult.c, Src/exec.c, diff --git a/Src/exec.c b/Src/exec.c index f42fb2b9b..3b0e936b4 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -3203,7 +3203,12 @@ execcmd(Estate state, int input, int output, int how, int last1) } if (fn->fd1 < 10) closemn(mfds, fn->fd1, REDIR_CLOSE); - if (!closed && zclose(fn->fd1) < 0) { + /* + * Only report failures to close file descriptors + * if they're under user control as we don't know + * what the previous status of others was. + */ + if (!closed && zclose(fn->fd1) < 0 && fn->varid) { zwarn("failed to close file descriptor %d: %e", fn->fd1, errno); } diff --git a/Test/A04redirect.ztst b/Test/A04redirect.ztst index a39ce46c8..cb6778874 100644 --- a/Test/A04redirect.ztst +++ b/Test/A04redirect.ztst @@ -152,11 +152,13 @@ >hello >goodbye - ({ exec 3<&- } 2>/dev/null - exec 3<&- - read foo <&-) + (exec {varid}<&0 + exec {varid}<&- + print About to close a second time >&2 + read {varid}<&-) 1:'<&-' redirection -*?\(eval\):*: failed to close file descriptor 3:* +?About to close a second time +*?\(eval\):*: failed to close file descriptor * print foo >&- 0:'>&-' redirection -- cgit 1.4.1