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