(root)/
findutils-4.9.0/
gnulib-tests/
sys_select.in.h
       1  /* Substitute for <sys/select.h>.
       2     Copyright (C) 2007-2022 Free Software Foundation, Inc.
       3  
       4     This file is free software: you can redistribute it and/or modify
       5     it under the terms of the GNU Lesser General Public License as
       6     published by the Free Software Foundation; either version 2.1 of the
       7     License, or (at your option) any later version.
       8  
       9     This file is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12     GNU Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public License
      15     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      16  
      17  # if __GNUC__ >= 3
      18  @PRAGMA_SYSTEM_HEADER@
      19  # endif
      20  @PRAGMA_COLUMNS@
      21  
      22  /* On OSF/1 and Solaris 2.6, <sys/types.h> and <sys/time.h>
      23     both include <sys/select.h>.
      24     On Cygwin and OpenBSD, <sys/time.h> includes <sys/select.h>.
      25     Simply delegate to the system's header in this case.  */
      26  #if (@HAVE_SYS_SELECT_H@                                                \
      27       && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H             \
      28       && ((defined __osf__ && defined _SYS_TYPES_H_                      \
      29            && defined _OSF_SOURCE)                                       \
      30           || (defined __sun && defined _SYS_TYPES_H                      \
      31               && (! (defined _XOPEN_SOURCE || defined _POSIX_C_SOURCE)   \
      32                   || defined __EXTENSIONS__))))
      33  
      34  # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H
      35  # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
      36  
      37  #elif (@HAVE_SYS_SELECT_H@                                              \
      38         && (defined _CYGWIN_SYS_TIME_H                                   \
      39             || (!defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H       \
      40                 && ((defined __osf__ && defined _SYS_TIME_H_             \
      41                      && defined _OSF_SOURCE)                             \
      42                     || (defined __OpenBSD__ && defined _SYS_TIME_H_)     \
      43                     || (defined __sun && defined _SYS_TIME_H             \
      44                         && (! (defined _XOPEN_SOURCE                     \
      45                                || defined _POSIX_C_SOURCE)               \
      46                             || defined __EXTENSIONS__))))))
      47  
      48  # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H
      49  # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
      50  
      51  /* On IRIX 6.5, <sys/timespec.h> includes <sys/types.h>, which includes
      52     <sys/bsd_types.h>, which includes <sys/select.h>.  At this point we cannot
      53     include <signal.h>, because that includes <internal/signal_core.h>, which
      54     gives a syntax error because <sys/timespec.h> has not been completely
      55     processed.  Simply delegate to the system's header in this case.  */
      56  #elif @HAVE_SYS_SELECT_H@ && defined __sgi && (defined _SYS_BSD_TYPES_H && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H)
      57  
      58  # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H
      59  # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
      60  
      61  /* On OpenBSD 5.0, <pthread.h> includes <sys/types.h>, which includes
      62     <sys/select.h>.  At this point we cannot include <signal.h>, because that
      63     includes gnulib's pthread.h override, which gives a syntax error because
      64     /usr/include/pthread.h has not been completely processed.  Simply delegate
      65     to the system's header in this case.  */
      66  #elif @HAVE_SYS_SELECT_H@ && defined __OpenBSD__ && (defined _PTHREAD_H_ && !defined PTHREAD_MUTEX_INITIALIZER)
      67  
      68  # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
      69  
      70  #else
      71  
      72  #ifndef _@GUARD_PREFIX@_SYS_SELECT_H
      73  
      74  /* On many platforms, <sys/select.h> assumes prior inclusion of
      75     <sys/types.h>.  Also, mingw defines sigset_t there, instead of
      76     in <signal.h> where it belongs.  */
      77  #include <sys/types.h>
      78  
      79  #if @HAVE_SYS_SELECT_H@
      80  
      81  /* On OSF/1 4.0, <sys/select.h> provides only a forward declaration
      82     of 'struct timeval', and no definition of this type.
      83     Also, Mac OS X, AIX, HP-UX, IRIX, Solaris, Interix declare select()
      84     in <sys/time.h>.
      85     But avoid namespace pollution on glibc systems and "unknown type
      86     name" problems on Cygwin.  */
      87  # if !(defined __GLIBC__ || defined __CYGWIN__)
      88  #  include <sys/time.h>
      89  # endif
      90  
      91  /* On AIX 7 and Solaris 10, <sys/select.h> provides an FD_ZERO implementation
      92     that relies on memset(), but without including <string.h>.
      93     But in any case avoid namespace pollution on glibc systems.  */
      94  # if (defined __OpenBSD__ || defined _AIX || defined __sun || defined __osf__ || defined __BEOS__) \
      95       && ! defined __GLIBC__
      96  #  include <string.h>
      97  # endif
      98  
      99  /* The include_next requires a split double-inclusion guard.  */
     100  # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
     101  
     102  #endif
     103  
     104  /* Get definition of 'sigset_t'.
     105     But avoid namespace pollution on glibc systems and "unknown type
     106     name" problems on Cygwin.
     107     On OS/2 kLIBC, sigset_t is defined in <sys/select.h>, too. In addition,
     108     if <sys/param.h> is included, <types.h> -> <sys/types.h> -> <sys/select.h>
     109     are included. Then <signal.h> -> <pthread.h> are included by GNULIB. By the
     110     way, <pthread.h> requires PAGE_SIZE defined in <sys/param.h>. However,
     111     <sys/param.h> has not been processed, yet. As a result, 'PAGE_SIZE'
     112     undeclared error occurs in <pthread.h>.
     113     Do this after the include_next (for the sake of OpenBSD 5.0) but before
     114     the split double-inclusion guard (for the sake of Solaris).  */
     115  #if !((defined __GLIBC__ || defined __CYGWIN__ || defined __KLIBC__) \
     116        && !defined __UCLIBC__)
     117  # include <signal.h>
     118  #endif
     119  
     120  #ifndef _@GUARD_PREFIX@_SYS_SELECT_H
     121  #define _@GUARD_PREFIX@_SYS_SELECT_H
     122  
     123  #if !@HAVE_SYS_SELECT_H@
     124  /* A platform that lacks <sys/select.h>.  */
     125  /* Get the 'struct timeval' and 'fd_set' types and the FD_* macros
     126     on most platforms.  */
     127  # include <sys/time.h>
     128  /* On HP-UX 11, <sys/time.h> provides an FD_ZERO implementation
     129     that relies on memset(), but without including <string.h>.  */
     130  # if defined __hpux
     131  #  include <string.h>
     132  # endif
     133  /* On native Windows platforms:
     134     Get the 'fd_set' type.
     135     Get the close() declaration before we override it.  */
     136  # if @HAVE_WINSOCK2_H@
     137  #  if !defined _GL_INCLUDING_WINSOCK2_H
     138  #   define _GL_INCLUDING_WINSOCK2_H
     139  #   include <winsock2.h>
     140  #   undef _GL_INCLUDING_WINSOCK2_H
     141  #  endif
     142  #  include <io.h>
     143  # endif
     144  #endif
     145  
     146  /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
     147  
     148  /* The definition of _GL_WARN_ON_USE is copied here.  */
     149  
     150  
     151  /* Fix some definitions from <winsock2.h>.  */
     152  
     153  #if @HAVE_WINSOCK2_H@
     154  
     155  # if !GNULIB_defined_rpl_fd_isset
     156  
     157  /* Re-define FD_ISSET to avoid a WSA call while we are not using
     158     network sockets.  */
     159  static int
     160  rpl_fd_isset (SOCKET fd, fd_set * set)
     161  {
     162    u_int i;
     163    if (set == NULL)
     164      return 0;
     165  
     166    for (i = 0; i < set->fd_count; i++)
     167      if (set->fd_array[i] == fd)
     168        return 1;
     169  
     170    return 0;
     171  }
     172  
     173  #  define GNULIB_defined_rpl_fd_isset 1
     174  # endif
     175  
     176  # undef FD_ISSET
     177  # define FD_ISSET(fd, set) rpl_fd_isset(fd, set)
     178  
     179  #endif
     180  
     181  /* Hide some function declarations from <winsock2.h>.  */
     182  
     183  #if @HAVE_WINSOCK2_H@
     184  # if !defined _@GUARD_PREFIX@_UNISTD_H
     185  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     186  #   undef close
     187  #   define close close_used_without_including_unistd_h
     188  #  elif !defined __clang__
     189      _GL_WARN_ON_USE (close,
     190                       "close() used without including <unistd.h>");
     191  #  endif
     192  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     193  #   undef gethostname
     194  #   define gethostname gethostname_used_without_including_unistd_h
     195  #  elif !defined __clang__
     196      _GL_WARN_ON_USE (gethostname,
     197                       "gethostname() used without including <unistd.h>");
     198  #  endif
     199  # endif
     200  # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
     201  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     202  #   undef socket
     203  #   define socket              socket_used_without_including_sys_socket_h
     204  #   undef connect
     205  #   define connect             connect_used_without_including_sys_socket_h
     206  #   undef accept
     207  #   define accept              accept_used_without_including_sys_socket_h
     208  #   undef bind
     209  #   define bind                bind_used_without_including_sys_socket_h
     210  #   undef getpeername
     211  #   define getpeername         getpeername_used_without_including_sys_socket_h
     212  #   undef getsockname
     213  #   define getsockname         getsockname_used_without_including_sys_socket_h
     214  #   undef getsockopt
     215  #   define getsockopt          getsockopt_used_without_including_sys_socket_h
     216  #   undef listen
     217  #   define listen              listen_used_without_including_sys_socket_h
     218  #   undef recv
     219  #   define recv                recv_used_without_including_sys_socket_h
     220  #   undef send
     221  #   define send                send_used_without_including_sys_socket_h
     222  #   undef recvfrom
     223  #   define recvfrom            recvfrom_used_without_including_sys_socket_h
     224  #   undef sendto
     225  #   define sendto              sendto_used_without_including_sys_socket_h
     226  #   undef setsockopt
     227  #   define setsockopt          setsockopt_used_without_including_sys_socket_h
     228  #   undef shutdown
     229  #   define shutdown            shutdown_used_without_including_sys_socket_h
     230  #  elif !defined __clang__
     231      _GL_WARN_ON_USE (socket,
     232                       "socket() used without including <sys/socket.h>");
     233      _GL_WARN_ON_USE (connect,
     234                       "connect() used without including <sys/socket.h>");
     235      _GL_WARN_ON_USE (accept,
     236                       "accept() used without including <sys/socket.h>");
     237      _GL_WARN_ON_USE (bind,
     238                       "bind() used without including <sys/socket.h>");
     239      _GL_WARN_ON_USE (getpeername,
     240                       "getpeername() used without including <sys/socket.h>");
     241      _GL_WARN_ON_USE (getsockname,
     242                       "getsockname() used without including <sys/socket.h>");
     243      _GL_WARN_ON_USE (getsockopt,
     244                       "getsockopt() used without including <sys/socket.h>");
     245      _GL_WARN_ON_USE (listen,
     246                       "listen() used without including <sys/socket.h>");
     247      _GL_WARN_ON_USE (recv,
     248                       "recv() used without including <sys/socket.h>");
     249      _GL_WARN_ON_USE (send,
     250                       "send() used without including <sys/socket.h>");
     251      _GL_WARN_ON_USE (recvfrom,
     252                       "recvfrom() used without including <sys/socket.h>");
     253      _GL_WARN_ON_USE (sendto,
     254                       "sendto() used without including <sys/socket.h>");
     255      _GL_WARN_ON_USE (setsockopt,
     256                       "setsockopt() used without including <sys/socket.h>");
     257      _GL_WARN_ON_USE (shutdown,
     258                       "shutdown() used without including <sys/socket.h>");
     259  #  endif
     260  # endif
     261  #endif
     262  
     263  
     264  #if @GNULIB_PSELECT@
     265  # if @REPLACE_PSELECT@
     266  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     267  #   undef pselect
     268  #   define pselect rpl_pselect
     269  #  endif
     270  _GL_FUNCDECL_RPL (pselect, int,
     271                    (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
     272                     struct timespec const *restrict, const sigset_t *restrict));
     273  _GL_CXXALIAS_RPL (pselect, int,
     274                    (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
     275                     struct timespec const *restrict, const sigset_t *restrict));
     276  # else
     277  #  if !@HAVE_PSELECT@
     278  _GL_FUNCDECL_SYS (pselect, int,
     279                    (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
     280                     struct timespec const *restrict, const sigset_t *restrict));
     281  #  endif
     282  /* Need to cast, because on AIX 7, the second, third, fourth argument may be
     283                          void *restrict,   void *restrict,   void *restrict.  */
     284  _GL_CXXALIAS_SYS_CAST (pselect, int,
     285                         (int,
     286                          fd_set *restrict, fd_set *restrict, fd_set *restrict,
     287                          struct timespec const *restrict,
     288                          const sigset_t *restrict));
     289  # endif
     290  _GL_CXXALIASWARN (pselect);
     291  #elif defined GNULIB_POSIXCHECK
     292  # undef pselect
     293  # if HAVE_RAW_DECL_PSELECT
     294  _GL_WARN_ON_USE (pselect, "pselect is not portable - "
     295                   "use gnulib module pselect for portability");
     296  # endif
     297  #endif
     298  
     299  #if @GNULIB_SELECT@
     300  # if @REPLACE_SELECT@
     301  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     302  #   undef select
     303  #   define select rpl_select
     304  #  endif
     305  _GL_FUNCDECL_RPL (select, int,
     306                    (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
     307                     struct timeval *restrict));
     308  _GL_CXXALIAS_RPL (select, int,
     309                    (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
     310                     timeval *restrict));
     311  # else
     312  _GL_CXXALIAS_SYS (select, int,
     313                    (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
     314                     timeval *restrict));
     315  # endif
     316  _GL_CXXALIASWARN (select);
     317  #elif @HAVE_WINSOCK2_H@
     318  # undef select
     319  # define select select_used_without_requesting_gnulib_module_select
     320  #elif defined GNULIB_POSIXCHECK
     321  # undef select
     322  # if HAVE_RAW_DECL_SELECT
     323  _GL_WARN_ON_USE (select, "select is not always POSIX compliant - "
     324                   "use gnulib module select for portability");
     325  # endif
     326  #endif
     327  
     328  
     329  #endif /* _@GUARD_PREFIX@_SYS_SELECT_H */
     330  #endif /* _@GUARD_PREFIX@_SYS_SELECT_H */
     331  #endif /* OSF/1 */