Blame lib/sys_select.in.h

Packit Service a2489d
/* Substitute for <sys/select.h>.
Packit Service a2489d
   Copyright (C) 2007-2018 Free Software Foundation, Inc.
Packit Service a2489d
Packit Service a2489d
   This program is free software; you can redistribute it and/or modify
Packit Service a2489d
   it under the terms of the GNU General Public License as published by
Packit Service a2489d
   the Free Software Foundation; either version 3, or (at your option)
Packit Service a2489d
   any later version.
Packit Service a2489d
Packit Service a2489d
   This program is distributed in the hope that it will be useful,
Packit Service a2489d
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service a2489d
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service a2489d
   GNU General Public License for more details.
Packit Service a2489d
Packit Service a2489d
   You should have received a copy of the GNU General Public License
Packit Service a2489d
   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
Packit Service a2489d
Packit Service a2489d
# if __GNUC__ >= 3
Packit Service a2489d
@PRAGMA_SYSTEM_HEADER@
Packit Service a2489d
# endif
Packit Service a2489d
@PRAGMA_COLUMNS@
Packit Service a2489d
Packit Service a2489d
/* On OSF/1 and Solaris 2.6, <sys/types.h> and <sys/time.h>
Packit Service a2489d
   both include <sys/select.h>.
Packit Service a2489d
   On Cygwin, <sys/time.h> includes <sys/select.h>.
Packit Service a2489d
   Simply delegate to the system's header in this case.  */
Packit Service a2489d
#if (@HAVE_SYS_SELECT_H@                                                \
Packit Service a2489d
     && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H             \
Packit Service a2489d
     && ((defined __osf__ && defined _SYS_TYPES_H_                      \
Packit Service a2489d
          && defined _OSF_SOURCE)                                       \
Packit Service a2489d
         || (defined __sun && defined _SYS_TYPES_H                      \
Packit Service a2489d
             && (! (defined _XOPEN_SOURCE || defined _POSIX_C_SOURCE)   \
Packit Service a2489d
                 || defined __EXTENSIONS__))))
Packit Service a2489d
Packit Service a2489d
# define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H
Packit Service a2489d
# @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
Packit Service a2489d
Packit Service a2489d
#elif (@HAVE_SYS_SELECT_H@                                              \
Packit Service a2489d
       && (defined _CYGWIN_SYS_TIME_H                                   \
Packit Service a2489d
           || (!defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H       \
Packit Service a2489d
               && ((defined __osf__ && defined _SYS_TIME_H_             \
Packit Service a2489d
                    && defined _OSF_SOURCE)                             \
Packit Service a2489d
                   || (defined __sun && defined _SYS_TIME_H             \
Packit Service a2489d
                       && (! (defined _XOPEN_SOURCE                     \
Packit Service a2489d
                              || defined _POSIX_C_SOURCE)               \
Packit Service a2489d
                           || defined __EXTENSIONS__))))))
Packit Service a2489d
Packit Service a2489d
# define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H
Packit Service a2489d
# @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
Packit Service a2489d
Packit Service a2489d
/* On IRIX 6.5, <sys/timespec.h> includes <sys/types.h>, which includes
Packit Service a2489d
   <sys/bsd_types.h>, which includes <sys/select.h>.  At this point we cannot
Packit Service a2489d
   include <signal.h>, because that includes <internal/signal_core.h>, which
Packit Service a2489d
   gives a syntax error because <sys/timespec.h> has not been completely
Packit Service a2489d
   processed.  Simply delegate to the system's header in this case.  */
Packit Service a2489d
#elif @HAVE_SYS_SELECT_H@ && defined __sgi && (defined _SYS_BSD_TYPES_H && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H)
Packit Service a2489d
Packit Service a2489d
# define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H
Packit Service a2489d
# @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
Packit Service a2489d
Packit Service a2489d
/* On OpenBSD 5.0, <pthread.h> includes <sys/types.h>, which includes
Packit Service a2489d
   <sys/select.h>.  At this point we cannot include <signal.h>, because that
Packit Service a2489d
   includes gnulib's pthread.h override, which gives a syntax error because
Packit Service a2489d
   /usr/include/pthread.h has not been completely processed.  Simply delegate
Packit Service a2489d
   to the system's header in this case.  */
Packit Service a2489d
#elif @HAVE_SYS_SELECT_H@ && defined __OpenBSD__ && (defined _PTHREAD_H_ && !defined PTHREAD_MUTEX_INITIALIZER)
Packit Service a2489d
Packit Service a2489d
# @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
Packit Service a2489d
Packit Service a2489d
#else
Packit Service a2489d
Packit Service a2489d
#ifndef _@GUARD_PREFIX@_SYS_SELECT_H
Packit Service a2489d
Packit Service a2489d
/* On many platforms, <sys/select.h> assumes prior inclusion of
Packit Service a2489d
   <sys/types.h>.  Also, mingw defines sigset_t there, instead of
Packit Service a2489d
   in <signal.h> where it belongs.  */
Packit Service a2489d
#include <sys/types.h>
Packit Service a2489d
Packit Service a2489d
#if @HAVE_SYS_SELECT_H@
Packit Service a2489d
Packit Service a2489d
/* On OSF/1 4.0, <sys/select.h> provides only a forward declaration
Packit Service a2489d
   of 'struct timeval', and no definition of this type.
Packit Service a2489d
   Also, Mac OS X, AIX, HP-UX, IRIX, Solaris, Interix declare select()
Packit Service a2489d
   in <sys/time.h>.
Packit Service a2489d
   But avoid namespace pollution on glibc systems and "unknown type
Packit Service a2489d
   name" problems on Cygwin.  */
Packit Service a2489d
# if !(defined __GLIBC__ || defined __CYGWIN__)
Packit Service a2489d
#  include <sys/time.h>
Packit Service a2489d
# endif
Packit Service a2489d
Packit Service a2489d
/* On AIX 7 and Solaris 10, <sys/select.h> provides an FD_ZERO implementation
Packit Service a2489d
   that relies on memset(), but without including <string.h>.
Packit Service a2489d
   But in any case avoid namespace pollution on glibc systems.  */
Packit Service a2489d
# if (defined __OpenBSD__ || defined _AIX || defined __sun || defined __osf__ || defined __BEOS__) \
Packit Service a2489d
     && ! defined __GLIBC__
Packit Service a2489d
#  include <string.h>
Packit Service a2489d
# endif
Packit Service a2489d
Packit Service a2489d
/* The include_next requires a split double-inclusion guard.  */
Packit Service a2489d
# @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
Packit Service a2489d
Packit Service a2489d
#endif
Packit Service a2489d
Packit Service a2489d
/* Get definition of 'sigset_t'.
Packit Service a2489d
   But avoid namespace pollution on glibc systems and "unknown type
Packit Service a2489d
   name" problems on Cygwin.
Packit Service a2489d
   Do this after the include_next (for the sake of OpenBSD 5.0) but before
Packit Service a2489d
   the split double-inclusion guard (for the sake of Solaris).  */
Packit Service a2489d
#if !((defined __GLIBC__ || defined __CYGWIN__) && !defined __UCLIBC__)
Packit Service a2489d
# include <signal.h>
Packit Service a2489d
#endif
Packit Service a2489d
Packit Service a2489d
#ifndef _@GUARD_PREFIX@_SYS_SELECT_H
Packit Service a2489d
#define _@GUARD_PREFIX@_SYS_SELECT_H
Packit Service a2489d
Packit Service a2489d
#if !@HAVE_SYS_SELECT_H@
Packit Service a2489d
/* A platform that lacks <sys/select.h>.  */
Packit Service a2489d
/* Get the 'struct timeval' and 'fd_set' types and the FD_* macros
Packit Service a2489d
   on most platforms.  */
Packit Service a2489d
# include <sys/time.h>
Packit Service a2489d
/* On HP-UX 11, <sys/time.h> provides an FD_ZERO implementation
Packit Service a2489d
   that relies on memset(), but without including <string.h>.  */
Packit Service a2489d
# if defined __hpux
Packit Service a2489d
#  include <string.h>
Packit Service a2489d
# endif
Packit Service a2489d
/* On native Windows platforms:
Packit Service a2489d
   Get the 'fd_set' type.
Packit Service a2489d
   Get the close() declaration before we override it.  */
Packit Service a2489d
# if @HAVE_WINSOCK2_H@
Packit Service a2489d
#  if !defined _GL_INCLUDING_WINSOCK2_H
Packit Service a2489d
#   define _GL_INCLUDING_WINSOCK2_H
Packit Service a2489d
#   include <winsock2.h>
Packit Service a2489d
#   undef _GL_INCLUDING_WINSOCK2_H
Packit Service a2489d
#  endif
Packit Service a2489d
#  include <io.h>
Packit Service a2489d
# endif
Packit Service a2489d
#endif
Packit Service a2489d
Packit Service a2489d
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
Packit Service a2489d
Packit Service a2489d
/* The definition of _GL_WARN_ON_USE is copied here.  */
Packit Service a2489d
Packit Service a2489d
Packit Service a2489d
/* Fix some definitions from <winsock2.h>.  */
Packit Service a2489d
Packit Service a2489d
#if @HAVE_WINSOCK2_H@
Packit Service a2489d
Packit Service a2489d
# if !GNULIB_defined_rpl_fd_isset
Packit Service a2489d
Packit Service a2489d
/* Re-define FD_ISSET to avoid a WSA call while we are not using
Packit Service a2489d
   network sockets.  */
Packit Service a2489d
static int
Packit Service a2489d
rpl_fd_isset (SOCKET fd, fd_set * set)
Packit Service a2489d
{
Packit Service a2489d
  u_int i;
Packit Service a2489d
  if (set == NULL)
Packit Service a2489d
    return 0;
Packit Service a2489d
Packit Service a2489d
  for (i = 0; i < set->fd_count; i++)
Packit Service a2489d
    if (set->fd_array[i] == fd)
Packit Service a2489d
      return 1;
Packit Service a2489d
Packit Service a2489d
  return 0;
Packit Service a2489d
}
Packit Service a2489d
Packit Service a2489d
#  define GNULIB_defined_rpl_fd_isset 1
Packit Service a2489d
# endif
Packit Service a2489d
Packit Service a2489d
# undef FD_ISSET
Packit Service a2489d
# define FD_ISSET(fd, set) rpl_fd_isset(fd, set)
Packit Service a2489d
Packit Service a2489d
#endif
Packit Service a2489d
Packit Service a2489d
/* Hide some function declarations from <winsock2.h>.  */
Packit Service a2489d
Packit Service a2489d
#if @HAVE_WINSOCK2_H@
Packit Service a2489d
# if !defined _@GUARD_PREFIX@_UNISTD_H
Packit Service a2489d
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit Service a2489d
#   undef close
Packit Service a2489d
#   define close close_used_without_including_unistd_h
Packit Service a2489d
#  else
Packit Service a2489d
    _GL_WARN_ON_USE (close,
Packit Service a2489d
                     "close() used without including <unistd.h>");
Packit Service a2489d
#  endif
Packit Service a2489d
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit Service a2489d
#   undef gethostname
Packit Service a2489d
#   define gethostname gethostname_used_without_including_unistd_h
Packit Service a2489d
#  else
Packit Service a2489d
    _GL_WARN_ON_USE (gethostname,
Packit Service a2489d
                     "gethostname() used without including <unistd.h>");
Packit Service a2489d
#  endif
Packit Service a2489d
# endif
Packit Service a2489d
# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
Packit Service a2489d
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit Service a2489d
#   undef socket
Packit Service a2489d
#   define socket              socket_used_without_including_sys_socket_h
Packit Service a2489d
#   undef connect
Packit Service a2489d
#   define connect             connect_used_without_including_sys_socket_h
Packit Service a2489d
#   undef accept
Packit Service a2489d
#   define accept              accept_used_without_including_sys_socket_h
Packit Service a2489d
#   undef bind
Packit Service a2489d
#   define bind                bind_used_without_including_sys_socket_h
Packit Service a2489d
#   undef getpeername
Packit Service a2489d
#   define getpeername         getpeername_used_without_including_sys_socket_h
Packit Service a2489d
#   undef getsockname
Packit Service a2489d
#   define getsockname         getsockname_used_without_including_sys_socket_h
Packit Service a2489d
#   undef getsockopt
Packit Service a2489d
#   define getsockopt          getsockopt_used_without_including_sys_socket_h
Packit Service a2489d
#   undef listen
Packit Service a2489d
#   define listen              listen_used_without_including_sys_socket_h
Packit Service a2489d
#   undef recv
Packit Service a2489d
#   define recv                recv_used_without_including_sys_socket_h
Packit Service a2489d
#   undef send
Packit Service a2489d
#   define send                send_used_without_including_sys_socket_h
Packit Service a2489d
#   undef recvfrom
Packit Service a2489d
#   define recvfrom            recvfrom_used_without_including_sys_socket_h
Packit Service a2489d
#   undef sendto
Packit Service a2489d
#   define sendto              sendto_used_without_including_sys_socket_h
Packit Service a2489d
#   undef setsockopt
Packit Service a2489d
#   define setsockopt          setsockopt_used_without_including_sys_socket_h
Packit Service a2489d
#   undef shutdown
Packit Service a2489d
#   define shutdown            shutdown_used_without_including_sys_socket_h
Packit Service a2489d
#  else
Packit Service a2489d
    _GL_WARN_ON_USE (socket,
Packit Service a2489d
                     "socket() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (connect,
Packit Service a2489d
                     "connect() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (accept,
Packit Service a2489d
                     "accept() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (bind,
Packit Service a2489d
                     "bind() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (getpeername,
Packit Service a2489d
                     "getpeername() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (getsockname,
Packit Service a2489d
                     "getsockname() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (getsockopt,
Packit Service a2489d
                     "getsockopt() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (listen,
Packit Service a2489d
                     "listen() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (recv,
Packit Service a2489d
                     "recv() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (send,
Packit Service a2489d
                     "send() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (recvfrom,
Packit Service a2489d
                     "recvfrom() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (sendto,
Packit Service a2489d
                     "sendto() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (setsockopt,
Packit Service a2489d
                     "setsockopt() used without including <sys/socket.h>");
Packit Service a2489d
    _GL_WARN_ON_USE (shutdown,
Packit Service a2489d
                     "shutdown() used without including <sys/socket.h>");
Packit Service a2489d
#  endif
Packit Service a2489d
# endif
Packit Service a2489d
#endif
Packit Service a2489d
Packit Service a2489d
Packit Service a2489d
#if @GNULIB_PSELECT@
Packit Service a2489d
# if @REPLACE_PSELECT@
Packit Service a2489d
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit Service a2489d
#   undef pselect
Packit Service a2489d
#   define pselect rpl_pselect
Packit Service a2489d
#  endif
Packit Service a2489d
_GL_FUNCDECL_RPL (pselect, int,
Packit Service a2489d
                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
Packit Service a2489d
                   struct timespec const *restrict, const sigset_t *restrict));
Packit Service a2489d
_GL_CXXALIAS_RPL (pselect, int,
Packit Service a2489d
                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
Packit Service a2489d
                   struct timespec const *restrict, const sigset_t *restrict));
Packit Service a2489d
# else
Packit Service a2489d
#  if !@HAVE_PSELECT@
Packit Service a2489d
_GL_FUNCDECL_SYS (pselect, int,
Packit Service a2489d
                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
Packit Service a2489d
                   struct timespec const *restrict, const sigset_t *restrict));
Packit Service a2489d
#  endif
Packit Service a2489d
_GL_CXXALIAS_SYS (pselect, int,
Packit Service a2489d
                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
Packit Service a2489d
                   struct timespec const *restrict, const sigset_t *restrict));
Packit Service a2489d
# endif
Packit Service a2489d
_GL_CXXALIASWARN (pselect);
Packit Service a2489d
#elif defined GNULIB_POSIXCHECK
Packit Service a2489d
# undef pselect
Packit Service a2489d
# if HAVE_RAW_DECL_PSELECT
Packit Service a2489d
_GL_WARN_ON_USE (pselect, "pselect is not portable - "
Packit Service a2489d
                 "use gnulib module pselect for portability");
Packit Service a2489d
# endif
Packit Service a2489d
#endif
Packit Service a2489d
Packit Service a2489d
#if @GNULIB_SELECT@
Packit Service a2489d
# if @REPLACE_SELECT@
Packit Service a2489d
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit Service a2489d
#   undef select
Packit Service a2489d
#   define select rpl_select
Packit Service a2489d
#  endif
Packit Service a2489d
_GL_FUNCDECL_RPL (select, int,
Packit Service a2489d
                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
Packit Service a2489d
                   struct timeval *restrict));
Packit Service a2489d
_GL_CXXALIAS_RPL (select, int,
Packit Service a2489d
                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
Packit Service a2489d
                   struct timeval *restrict));
Packit Service a2489d
# else
Packit Service a2489d
_GL_CXXALIAS_SYS (select, int,
Packit Service a2489d
                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
Packit Service a2489d
                   struct timeval *restrict));
Packit Service a2489d
# endif
Packit Service a2489d
_GL_CXXALIASWARN (select);
Packit Service a2489d
#elif @HAVE_WINSOCK2_H@
Packit Service a2489d
# undef select
Packit Service a2489d
# define select select_used_without_requesting_gnulib_module_select
Packit Service a2489d
#elif defined GNULIB_POSIXCHECK
Packit Service a2489d
# undef select
Packit Service a2489d
# if HAVE_RAW_DECL_SELECT
Packit Service a2489d
_GL_WARN_ON_USE (select, "select is not always POSIX compliant - "
Packit Service a2489d
                 "use gnulib module select for portability");
Packit Service a2489d
# endif
Packit Service a2489d
#endif
Packit Service a2489d
Packit Service a2489d
Packit Service a2489d
#endif /* _@GUARD_PREFIX@_SYS_SELECT_H */
Packit Service a2489d
#endif /* _@GUARD_PREFIX@_SYS_SELECT_H */
Packit Service a2489d
#endif /* OSF/1 */