Commit | Line | Data |
---|---|---|
c0c3707f | 1 | # getdtablesize.m4 serial 7 |
5df4cba6 | 2 | dnl Copyright (C) 2008-2020 Free Software Foundation, Inc. |
6ec2e0f5 SDJ |
3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | |
5 | dnl with or without modifications, as long as this notice is preserved. | |
6 | ||
7 | AC_DEFUN([gl_FUNC_GETDTABLESIZE], | |
8 | [ | |
9 | AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) | |
10 | AC_REQUIRE([AC_CANONICAL_HOST]) | |
11 | AC_CHECK_FUNCS_ONCE([getdtablesize]) | |
12 | AC_CHECK_DECLS_ONCE([getdtablesize]) | |
13 | if test $ac_cv_func_getdtablesize = yes && | |
14 | test $ac_cv_have_decl_getdtablesize = yes; then | |
6ec2e0f5 SDJ |
15 | AC_CACHE_CHECK([whether getdtablesize works], |
16 | [gl_cv_func_getdtablesize_works], | |
c0c3707f CB |
17 | [dnl There are two concepts: the "maximum possible file descriptor value + 1" |
18 | dnl and the "maximum number of open file descriptors in a process". | |
19 | dnl Per SUSv2 and POSIX, getdtablesize() should return the first one. | |
20 | dnl On most platforms, the first and the second concept are the same. | |
21 | dnl On OpenVMS, however, they are different and getdtablesize() returns | |
22 | dnl the second one; thus the test below fails. But we don't care | |
23 | dnl because there's no good way to write a replacement getdtablesize(). | |
24 | case "$host_os" in | |
25 | vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; | |
26 | *) | |
27 | dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft | |
28 | dnl limit up to an unchangeable hard limit; all other platforms | |
29 | dnl correctly require setrlimit before getdtablesize() can report | |
30 | dnl a larger value. | |
31 | AC_RUN_IFELSE([ | |
32 | AC_LANG_PROGRAM([[#include <unistd.h>]], | |
33 | [int size = getdtablesize(); | |
34 | if (dup2 (0, getdtablesize()) != -1) | |
35 | return 1; | |
36 | if (size != getdtablesize()) | |
37 | return 2; | |
38 | ])], | |
39 | [gl_cv_func_getdtablesize_works=yes], | |
40 | [gl_cv_func_getdtablesize_works=no], | |
41 | [case "$host_os" in | |
42 | cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows | |
43 | gl_cv_func_getdtablesize_works="guessing no" ;; | |
44 | *) gl_cv_func_getdtablesize_works="guessing yes" ;; | |
45 | esac | |
46 | ]) | |
47 | ;; | |
48 | esac | |
6ec2e0f5 SDJ |
49 | ]) |
50 | case "$gl_cv_func_getdtablesize_works" in | |
c0c3707f | 51 | *yes | "no (limitation)") ;; |
6ec2e0f5 SDJ |
52 | *) REPLACE_GETDTABLESIZE=1 ;; |
53 | esac | |
54 | else | |
55 | HAVE_GETDTABLESIZE=0 | |
56 | fi | |
57 | ]) | |
58 | ||
59 | # Prerequisites of lib/getdtablesize.c. | |
60 | AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:]) |