]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib/fileutils: add get_fd_tabsize()
authorKarel Zak <kzak@redhat.com>
Mon, 23 Apr 2012 11:52:41 +0000 (13:52 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 23 Apr 2012 11:58:39 +0000 (13:58 +0200)
as a fallback for the function getdtablesize()

Signed-off-by: Karel Zak <kzak@redhat.com>
include/fileutils.h
lib/fileutils.c

index 691429ba09b2c45353b6527bc3f7ff974ef2b641..33aba0a0d51a8123b06078ad207d0fa8acdcae9e 100644 (file)
@@ -17,4 +17,7 @@ static inline FILE *xfmkstemp(char **tmpname)
        }
        return ret;
 }
-#endif
+
+extern int get_fd_tabsize(void);
+
+#endif /* UTIL_LINUX_FILEUTILS */
index 4849061bb755ddb342369ccb1ac0da6bbe9bc683..0d4656f1109f59545dc751d849a365acb888a0ae 100644 (file)
@@ -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)
 {