From be92327e712a0371d7f5d45b5e4bfc5631371114 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Mon, 23 Apr 2012 13:52:41 +0200 Subject: [PATCH] lib/fileutils: add get_fd_tabsize() as a fallback for the function getdtablesize() Signed-off-by: Karel Zak --- include/fileutils.h | 5 ++++- lib/fileutils.c | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/include/fileutils.h b/include/fileutils.h index 691429ba09..33aba0a0d5 100644 --- a/include/fileutils.h +++ b/include/fileutils.h @@ -17,4 +17,7 @@ static inline FILE *xfmkstemp(char **tmpname) } return ret; } -#endif + +extern int get_fd_tabsize(void); + +#endif /* UTIL_LINUX_FILEUTILS */ diff --git a/lib/fileutils.c b/lib/fileutils.c index 4849061bb7..0d4656f110 100644 --- a/lib/fileutils.c +++ b/lib/fileutils.c @@ -6,6 +6,8 @@ #include #include #include +#include +#include #include "c.h" #include "fileutils.h" @@ -39,6 +41,28 @@ int xmkstemp(char **tmpname) return fd; } +/* + * portable getdtablesize() + */ +int get_fd_tabsize(void) +{ + int m; + +#if defined(HAVE_GETDTABLESIZE) + m = getdtablesize(); +#elif defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE) + struct rlimit rl; + + getrlimit(RLIMIT_NOFILE, &rl); + m = rl.rlim_cur; +#elif defined(HAVE_SYSCONF) && defined(_SC_OPEN_MAX) + m = sysconf(_SC_OPEN_MAX); +#else + m = OPEN_MAX; +#endif + return m; +} + #ifdef TEST_PROGRAM int main(void) { -- 2.47.3