]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - misc/sys/select.h
Update copyright notices with scripts/update-copyrights
[thirdparty/glibc.git] / misc / sys / select.h
index 320df02e028fd9ec7d4cfd846216e30b3c0e39ab..fd13bab41a488911ae95c2919a74587f8c3525b8 100644 (file)
 /* `fd_set' type and related macros, and `select'/`pselect' declarations.
-Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   Copyright (C) 1996-2014 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
 
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
 
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
 
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
 
 /*     POSIX 1003.1g: 6.2 Select from File Descriptor Sets <sys/select.h>  */
 
-#ifndef __SYS_SELECT_H
+#ifndef _SYS_SELECT_H
+#define _SYS_SELECT_H  1
 
-#define __SYS_SELECT_H 1
 #include <features.h>
 
 /* Get definition of needed basic types.  */
-#include <gnu/types.h>
+#include <bits/types.h>
+
+/* Get __FD_* definitions.  */
+#include <bits/select.h>
+
+/* Get __sigset_t.  */
+#include <bits/sigset.h>
+
+#ifndef __sigset_t_defined
+# define __sigset_t_defined
+typedef __sigset_t sigset_t;
+#endif
 
 /* Get definition of timer specification structures.  */
+#define __need_time_t
 #define __need_timespec
-#include <sys/time.h>
+#include <time.h>
+#define __need_timeval
+#include <bits/time.h>
 
-__BEGIN_DECLS
+#ifndef __suseconds_t_defined
+typedef __suseconds_t suseconds_t;
+# define __suseconds_t_defined
+#endif
 
-/* This declaration puts `struct timeval' in global scope even if
-   <sys/time.h> has not been included to define it.  That way the
-   `select' prototype below will not conflict with a later definition
-   of `struct timeval'.  */
-struct timeval;
 
-/* Representation of a set of file descriptors.  */
-#define        fd_set                  __fd_set
+/* The fd_set member is required to be an array of longs.  */
+typedef long int __fd_mask;
+
+/* Some versions of <linux/posix_types.h> define this macros.  */
+#undef __NFDBITS
+/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
+#define __NFDBITS      (8 * (int) sizeof (__fd_mask))
+#define        __FD_ELT(d)     ((d) / __NFDBITS)
+#define        __FD_MASK(d)    ((__fd_mask) 1 << ((d) % __NFDBITS))
+
+/* fd_set for select and pselect.  */
+typedef struct
+  {
+    /* XPG4.2 requires this member name.  Otherwise avoid the name
+       from the global namespace.  */
+#ifdef __USE_XOPEN
+    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
+# define __FDS_BITS(set) ((set)->fds_bits)
+#else
+    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
+# define __FDS_BITS(set) ((set)->__fds_bits)
+#endif
+  } fd_set;
 
 /* Maximum number of file descriptors in `fd_set'.  */
 #define        FD_SETSIZE              __FD_SETSIZE
 
 #ifdef __USE_MISC
+/* Sometimes the fd_set member is assumed to have this type.  */
+typedef __fd_mask fd_mask;
+
 /* Number of bits per word of `fd_set' (some code assumes this is 32).  */
-#define        NFDBITS                 __NFDBITS
+# define NFDBITS               __NFDBITS
 #endif
 
 
 /* Access macros for `fd_set'.  */
-#define        FD_SET(fd, fdsetp)      __FD_SET ((fd), (fdsetp))
-#define        FD_CLR(fd, fdsetp)      __FD_CLR ((fd), (fdsetp))
-#define        FD_ISSET(fd, fdsetp)    __FD_ISSET ((fd), (fdsetp))
+#define        FD_SET(fd, fdsetp)      __FD_SET (fd, fdsetp)
+#define        FD_CLR(fd, fdsetp)      __FD_CLR (fd, fdsetp)
+#define        FD_ISSET(fd, fdsetp)    __FD_ISSET (fd, fdsetp)
 #define        FD_ZERO(fdsetp)         __FD_ZERO (fdsetp)
 
 
+__BEGIN_DECLS
+
 /* Check the first NFDS descriptors each in READFDS (if not NULL) for read
    readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS
    (if not NULL) for exceptional conditions.  If TIMEOUT is not NULL, time out
    after waiting the interval specified therein.  Returns the number of ready
-   descriptors, or -1 for errors.  */
-extern int __select __P ((int __nfds, __fd_set *__readfds,
-                         __fd_set *__writefds, __fd_set *__exceptfds,
-                         struct timeval *__timeout));
-extern int select __P ((int __nfds, __fd_set *__readfds,
-                       __fd_set *__writefds, __fd_set *__exceptfds,
-                       struct timeval *__timeout));
+   descriptors, or -1 for errors.
 
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int select (int __nfds, fd_set *__restrict __readfds,
+                  fd_set *__restrict __writefds,
+                  fd_set *__restrict __exceptfds,
+                  struct timeval *__restrict __timeout);
+
+#ifdef __USE_XOPEN2K
 /* Same as above only that the TIMEOUT value is given with higher
-   resolution.  This version should be used.  */
-extern int __pselect __P ((int __nfds, __fd_set *__readfds,
-                          __fd_set *__writefds, __fd_set *__exceptfds,
-                          struct timespec *__timeout));
-extern int pselect __P ((int __nfds, __fd_set *__readfds,
-                        __fd_set *__writefds, __fd_set *__exceptfds,
-                        struct timespec *__timeout));
+   resolution and a sigmask which is been set temporarily.  This version
+   should be used.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pselect (int __nfds, fd_set *__restrict __readfds,
+                   fd_set *__restrict __writefds,
+                   fd_set *__restrict __exceptfds,
+                   const struct timespec *__restrict __timeout,
+                   const __sigset_t *__restrict __sigmask);
+#endif
+
+
+/* Define some inlines helping to catch common problems.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __GNUC__
+# include <bits/select2.h>
+#endif
 
 __END_DECLS