From 621bcdd7671d7463910afe24fada85792d803a8c Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Sun, 10 Oct 1999 16:03:01 +0000 Subject: zsh-workers/8187 --- Src/exec.c | 15 ++++++++++++--- Src/glob.c | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Src/exec.c b/Src/exec.c index 0670148c7..6d504e52d 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -1908,14 +1908,23 @@ execcmd(Cmd cmd, int input, int output, int how, int last1) case MERGEOUT: if(fn->fd2 < 10) closemn(mfds, fn->fd2); - fil = dup(fn->fd2); + if(fn->fd2 > 9) { + fil = -1; + errno = EBADF; + } else { + int fd = fn->fd2; + if(fd == -2) + fd = (fn->type == MERGEOUT) ? coprocout : coprocin; + fil = dup(fd); + } if (fil == -1) { char fdstr[4]; closemnodes(mfds); fixfds(save); - sprintf(fdstr, "%d", fn->fd2); - zerr("%s: %e", fdstr, errno); + if(fn->fd2 != -2) + sprintf(fdstr, "%d", fn->fd2); + zerr("%s: %e", fn->fd2 == -2 ? "coprocess" : fdstr, errno); execerr(); } addfd(forked, save, mfds, fn->fd1, fil, fn->type == MERGEOUT); diff --git a/Src/glob.c b/Src/glob.c index 07336986d..d8cfc6a6a 100644 --- a/Src/glob.c +++ b/Src/glob.c @@ -1580,7 +1580,7 @@ xpandredir(struct redir *fn, LinkList tab) if (s[0] == '-' && !s[1]) fn->type = CLOSE; else if (s[0] == 'p' && !s[1]) - fn->fd2 = (fn->type == MERGEOUT) ? coprocout : coprocin; + fn->fd2 = -2; else { while (idigit(*s)) s++; -- cgit 1.4.1