From 83eda97dffe6fa57b2908e1f18f488d9ba9071f9 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Fri, 18 Aug 2000 18:14:08 +0000 Subject: * dtable.cc (dtable::dup2): Extend fdtab if newfd is out of current allocated bounds. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/dtable.cc | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index cf952231a..51d9bc5df 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +Fri Aug 18 11:11:00 2000 Corinna Vinschen + + * dtable.cc (dtable::dup2): Extend fdtab if newfd is out of current + allocated bounds. + Sat Aug 12 01:47:28 2000 Christopher Faylor * mkvers.sh: Properly trap exit removal of temp file. Remove debugging 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); -- cgit v1.2.3