diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index c3df032d4..aa9c1540f 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,11 @@ +Thu Aug 16 16:26:00 2001 Corinna Vinschen + + * resource.cc (getrlimit): Return getdtablesize () as current limit + on RLIMIT_NOFILE. + * syscalls.cc (getdtablesize): Return OPEN_MAX if current dtable size + is less than OPEN_MAX, the current dtable size otherwise. + * sysconf.cc (sysconf): Return getdtablesize () on _SC_OPEN_MAX. + Thu Aug 16 16:17:00 2001 Corinna Vinschen * resource.cc (getrlimit): Return OPEN_MAX as current limit diff --git a/winsup/cygwin/resource.cc b/winsup/cygwin/resource.cc index 3ee6c57da..84ab9feaa 100644 --- a/winsup/cygwin/resource.cc +++ b/winsup/cygwin/resource.cc @@ -120,7 +120,7 @@ getrlimit (int resource, struct rlimit *rlp) case RLIMIT_STACK: break; case RLIMIT_NOFILE: - rlp->rlim_cur = OPEN_MAX; + rlp->rlim_cur = getdtablesize (); break; case RLIMIT_CORE: rlp->rlim_cur = rlim_core; diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 8e34825e2..936fd596c 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -1445,7 +1445,7 @@ setdtablesize (int size) extern "C" int getdtablesize () { - return OPEN_MAX; + return cygheap->fdtab.size > OPEN_MAX ? cygheap->fdtab.size : OPEN_MAX; } extern "C" size_t diff --git a/winsup/cygwin/sysconf.cc b/winsup/cygwin/sysconf.cc index 5c930fb22..5ffb03789 100644 --- a/winsup/cygwin/sysconf.cc +++ b/winsup/cygwin/sysconf.cc @@ -33,7 +33,7 @@ sysconf (int in) /* FIXME: what's the right value? _POSIX_ARG_MAX is only 4K */ return 1048576; case _SC_OPEN_MAX: - return OPEN_MAX; + return getdtablesize (); case _SC_PAGESIZE: return getpagesize (); case _SC_CLK_TCK: