diff options
author | Paul Ackersviller <packersv@users.sourceforge.net> | 2007-04-23 04:20:22 +0000 |
---|---|---|
committer | Paul Ackersviller <packersv@users.sourceforge.net> | 2007-04-23 04:20:22 +0000 |
commit | eaf13e9eabfc0531d6e3dedc090f0f495c8139d4 (patch) | |
tree | 3d0fc83c6414b476099c0c572f11cc69b73b21b6 /Src/utils.c | |
parent | f355b42e167ab7e2263c23f52a237a6706b610b6 (diff) | |
download | zsh-eaf13e9eabfc0531d6e3dedc090f0f495c8139d4.tar.gz zsh-eaf13e9eabfc0531d6e3dedc090f0f495c8139d4.tar.xz zsh-eaf13e9eabfc0531d6e3dedc090f0f495c8139d4.zip |
Merge of 21049: Don't close process substitution file descriptors for external programmes
Diffstat (limited to 'Src/utils.c')
-rw-r--r-- | Src/utils.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/Src/utils.c b/Src/utils.c index e9a2e8784..66585f10e 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -1078,10 +1078,11 @@ movefd(int fd) if(fd != -1) { if (fd > max_zsh_fd) { while (fd >= fdtable_size) - fdtable = zrealloc(fdtable, (fdtable_size *= 2)); + fdtable = zrealloc(fdtable, + (fdtable_size *= 2)*sizeof(*fdtable)); max_zsh_fd = fd; } - fdtable[fd] = 1; + fdtable[fd] = FDT_INTERNAL; } return fd; } @@ -1096,7 +1097,7 @@ redup(int x, int y) zclose(y); else if (x != y) { while (y >= fdtable_size) - fdtable = zrealloc(fdtable, (fdtable_size *= 2)); + fdtable = zrealloc(fdtable, (fdtable_size *= 2)*sizeof(*fdtable)); dup2(x, y); if ((fdtable[y] = fdtable[x]) && y > max_zsh_fd) max_zsh_fd = y; @@ -1111,8 +1112,8 @@ mod_export int zclose(int fd) { if (fd >= 0) { - fdtable[fd] = 0; - while (max_zsh_fd > 0 && !fdtable[max_zsh_fd]) + fdtable[fd] = FDT_UNUSED; + while (max_zsh_fd > 0 && fdtable[max_zsh_fd] == FDT_UNUSED) max_zsh_fd--; if (fd == coprocin) coprocin = -1; |