diff options
author | Karel Zak | 2012-04-23 13:52:41 +0200 |
---|---|---|
committer | Karel Zak | 2012-04-23 13:58:39 +0200 |
commit | be92327e712a0371d7f5d45b5e4bfc5631371114 (patch) | |
tree | 643ffc3bbcacb34b56e824f4208052f7fc678815 | |
parent | login: use getdtablesize() correctly in login.c (diff) | |
download | kernel-qcow2-util-linux-be92327e712a0371d7f5d45b5e4bfc5631371114.tar.gz kernel-qcow2-util-linux-be92327e712a0371d7f5d45b5e4bfc5631371114.tar.xz kernel-qcow2-util-linux-be92327e712a0371d7f5d45b5e4bfc5631371114.zip |
lib/fileutils: add get_fd_tabsize()
as a fallback for the function getdtablesize()
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r-- | include/fileutils.h | 5 | ||||
-rw-r--r-- | lib/fileutils.c | 24 |
2 files changed, 28 insertions, 1 deletions
diff --git a/include/fileutils.h b/include/fileutils.h index 691429ba0..33aba0a0d 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 4849061bb..0d4656f11 100644 --- a/lib/fileutils.c +++ b/lib/fileutils.c @@ -6,6 +6,8 @@ #include <stdlib.h> #include <sys/stat.h> #include <unistd.h> +#include <sys/time.h> +#include <sys/resource.h> #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) { |