diff options
-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) { |