diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2000-08-18 18:14:08 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2000-08-18 18:14:08 +0000 |
commit | 83eda97dffe6fa57b2908e1f18f488d9ba9071f9 (patch) | |
tree | 3be3e82e976e7b58b13b9b266f1d84c188b8b54f /winsup/cygwin/dtable.cc | |
parent | 1c75dc93c8e26e4018a76e47d9328c078a70a188 (diff) | |
download | cygnal-83eda97dffe6fa57b2908e1f18f488d9ba9071f9.tar.gz cygnal-83eda97dffe6fa57b2908e1f18f488d9ba9071f9.tar.bz2 cygnal-83eda97dffe6fa57b2908e1f18f488d9ba9071f9.zip |
* dtable.cc (dtable::dup2): Extend fdtab if newfd is out of current
allocated bounds.
Diffstat (limited to 'winsup/cygwin/dtable.cc')
-rw-r--r-- | winsup/cygwin/dtable.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 716770ae8..9f0c2a047 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -345,6 +345,12 @@ dtable::dup2 (int oldfd, int newfd) } SetResourceLock(LOCK_FD_LIST,WRITE_LOCK|READ_LOCK,"dup"); + if ((size_t) newfd >= fdtab.size) + { + int inc_size = NOFILE_INCR * ((newfd + NOFILE_INCR - 1) / NOFILE_INCR) - + fdtab.size; + fdtab.extend (inc_size); + } if ((size_t) newfd >= fdtab.size || newfd < 0) { syscall_printf ("new fd out of bounds: %d", newfd); |