1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-17 12:41:05 +03:00

getdtablesize: port better for Android

Problem reported by Kevin Cernekee in:
http://lists.gnu.org/archive/html/bug-gnulib/2015-02/msg00112.html
* doc/glibc-functions/getdtablesize.texi (getdtablesize): Mention bug.
* lib/getdtablesize.c (getdtablesize): Don't fall back on _SC_OPEN_MAX.
Instead, just use getrlimit, taking care to avoid Cygwin bug.

dup2, fcntl: cross-compile better for Android
This commit is contained in:
Paul Eggert
2015-02-20 10:53:10 -08:00
parent d42461c38d
commit 62667e387b
3 changed files with 27 additions and 21 deletions

View File

@@ -1,5 +1,12 @@
2015-02-20 Paul Eggert <eggert@cs.ucla.edu> 2015-02-20 Paul Eggert <eggert@cs.ucla.edu>
getdtablesize: port better for Android
Problem reported by Kevin Cernekee in:
http://lists.gnu.org/archive/html/bug-gnulib/2015-02/msg00112.html
* doc/glibc-functions/getdtablesize.texi (getdtablesize): Mention bug.
* lib/getdtablesize.c (getdtablesize): Don't fall back on _SC_OPEN_MAX.
Instead, just use getrlimit, taking care to avoid Cygwin bug.
poll: fixes for large fds poll: fixes for large fds
* lib/poll.c (poll): Don't check directly for NFD too large. * lib/poll.c (poll): Don't check directly for NFD too large.
Don't rely on undefined behavior in FD_SET when an arg exceeds Don't rely on undefined behavior in FD_SET when an arg exceeds
@@ -15,7 +22,7 @@
2015-02-18 Paul Eggert <eggert@cs.ucla.edu> 2015-02-18 Paul Eggert <eggert@cs.ucla.edu>
dup2, fcntl: cross-compiler better for Android dup2, fcntl: cross-compile better for Android
Problem reported by Kevin Cernekee in: Problem reported by Kevin Cernekee in:
http://lists.gnu.org/archive/html/bug-gnulib/2015-02/msg00109.html http://lists.gnu.org/archive/html/bug-gnulib/2015-02/msg00109.html
* m4/dup2.m4 (gl_FUNC_DUP2): Don't guess no when cross-compiling * m4/dup2.m4 (gl_FUNC_DUP2): Don't guess no when cross-compiling

View File

@@ -17,7 +17,7 @@ Android LP32.
@item @item
This function does not represent the true @code{RLIMIT_NOFILE} soft This function does not represent the true @code{RLIMIT_NOFILE} soft
limit on some platforms: limit on some platforms:
Cygwin 1.7.25. Android LP32, Cygwin 1.7.25.
@end itemize @end itemize
Portability problems not fixed by Gnulib: Portability problems not fixed by Gnulib:

View File

@@ -84,32 +84,31 @@ getdtablesize (void)
return dtablesize; return dtablesize;
} }
#elif HAVE_GETDTABLESIZE && HAVE_DECL_GETDTABLESIZE #else
# include <limits.h>
# include <sys/resource.h> # include <sys/resource.h>
# undef getdtablesize
int # ifdef __CYGWIN__
rpl_getdtablesize(void) /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it
{ hits the compile-time constant hard limit of 3200. We might as
/* To date, this replacement is only compiled for Cygwin 1.7.25, well just report the hard limit. */
which auto-increased the RLIMIT_NOFILE soft limit until it # define rlim_cur rlim_max
hits the compile-time constant hard limit of 3200. Although # endif
that version of cygwin supported a child process inheriting
a smaller soft limit, the smaller limit is not enforced, so
we might as well just report the hard limit. */
struct rlimit lim;
if (!getrlimit (RLIMIT_NOFILE, &lim) && lim.rlim_max != RLIM_INFINITY)
return lim.rlim_max;
return getdtablesize ();
}
#elif defined _SC_OPEN_MAX
int int
getdtablesize (void) getdtablesize (void)
{ {
return sysconf (_SC_OPEN_MAX); struct rlimit lim;
if (getrlimit (RLIMIT_NOFILE, &lim) == 0
&& 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX
&& lim.rlim_cur != RLIM_INFINITY
&& lim.rlim_cur != RLIM_SAVED_CUR
&& lim.rlim_cur != RLIM_SAVED_MAX)
return lim.rlim_cur;
return INT_MAX;
} }
#endif #endif