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:
@@ -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
|
||||||
|
@@ -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:
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user