summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak2012-04-23 13:52:41 +0200
committerKarel Zak2012-04-23 13:58:39 +0200
commitbe92327e712a0371d7f5d45b5e4bfc5631371114 (patch)
tree643ffc3bbcacb34b56e824f4208052f7fc678815
parentlogin: use getdtablesize() correctly in login.c (diff)
downloadkernel-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.h5
-rw-r--r--lib/fileutils.c24
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)
{