1 /* sysselect.h - System-dependent definitions for the select function.
2 Copyright (C) 1995, 2001-2013 Free Software Foundation, Inc.
4 This file is part of GNU Emacs.
6 GNU Emacs is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 GNU Emacs is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
19 #ifndef EMACS_SYSSELECT_H
20 #define EMACS_SYSSELECT_H
23 #include <sys/select.h>
28 /* File descriptor set emulation. */
30 /* MSVC runtime library has limit of 64 descriptors by default */
33 unsigned int bits
[FD_SETSIZE
/ 32];
36 /* standard access macros */
37 #define FD_SET(n, p) \
39 if ((n) < FD_SETSIZE) { \
40 (p)->bits[(n)/32] |= (1 << (n)%32); \
43 #define FD_CLR(n, p) \
45 if ((n) < FD_SETSIZE) { \
46 (p)->bits[(n)/32] &= ~(1 << (n)%32); \
49 #define FD_ISSET(n, p) ((n) < FD_SETSIZE ? ((p)->bits[(n)/32] & (1 << (n)%32)) : 0)
50 #define FD_ZERO(p) memset((p), 0, sizeof(fd_set))
52 #define SELECT_TYPE fd_set
55 extern int sys_select (int, SELECT_TYPE
*, SELECT_TYPE
*, SELECT_TYPE
*,
56 EMACS_TIME
*, sigset_t
*);
58 #else /* not WINDOWSNT */
62 #define MAXDESC FD_SETSIZE
66 #define SELECT_TYPE fd_set
69 #define SELECT_TYPE int
71 /* Define the macros to access a single-int bitmap of descriptors. */
72 #define FD_SET(n, p) (*(p) |= (1 << (n)))
73 #define FD_CLR(n, p) (*(p) &= ~(1 << (n)))
74 #define FD_ISSET(n, p) (*(p) & (1 << (n)))
75 #define FD_ZERO(p) (*(p) = 0)
76 #endif /* no FD_SET */
77 #endif /* not WINDOWSNT */
79 #if !defined (HAVE_SELECT)
80 #define select sys_select
84 #define pselect sys_select
87 #endif /* EMACS_SYSSELECT_H */