diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2009-09-22 09:17:05 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2009-09-22 09:17:05 +0000 |
commit | 51409732d0e647661915fde0b15323005be7c9e8 (patch) | |
tree | dee1a7c103a59916c77fe7fac4aa8f9f2171a8ef /Src/exec.c | |
parent | 997eafdcad85e9a2c59db1141b404dd4c4bcb22d (diff) | |
download | zsh-51409732d0e647661915fde0b15323005be7c9e8.tar.gz zsh-51409732d0e647661915fde0b15323005be7c9e8.tar.xz zsh-51409732d0e647661915fde0b15323005be7c9e8.zip |
27284: better use of movefd()
Diffstat (limited to 'Src/exec.c')
-rw-r--r-- | Src/exec.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/Src/exec.c b/Src/exec.c index ca9cf0f4d..2263bd640 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -1958,14 +1958,19 @@ addfd(int forked, int *save, struct multio **mfds, int fd1, int fd2, int rflag, if (varid) { /* fd will be over 10, don't touch mfds */ fd1 = movefd(fd2); - fdtable[fd1] = FDT_EXTERNAL; - setiparam(varid, (zlong)fd1); - /* - * If setting the parameter failed, close the fd else - * it will leak. - */ - if (errflag) - zclose(fd1); + if (fd1 == -1) { + zerr("cannot moved fd %d: %e", fd2, errno); + return; + } else { + fdtable[fd1] = FDT_EXTERNAL; + setiparam(varid, (zlong)fd1); + /* + * If setting the parameter failed, close the fd else + * it will leak. + */ + if (errflag) + zclose(fd1); + } } else if (!mfds[fd1] || unset(MULTIOS)) { if(!mfds[fd1]) { /* starting a new multio */ mfds[fd1] = (struct multio *) zhalloc(sizeof(struct multio)); |