Blame gnulib/lib/sys_select.in.h

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