From: Karel Zak Date: Mon, 23 Apr 2012 11:52:41 +0000 (+0200) Subject: lib/fileutils: add get_fd_tabsize() X-Git-Tag: v2.22-rc1~494 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=be92327e712a0371d7f5d45b5e4bfc5631371114;p=thirdparty%2Futil-linux.git lib/fileutils: add get_fd_tabsize() as a fallback for the function getdtablesize() Signed-off-by: Karel Zak --- 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) {