aboutsummaryrefslogtreecommitdiffstats
path: root/src/sysselect.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/sysselect.h')
-rw-r--r--src/sysselect.h38
1 files changed, 35 insertions, 3 deletions
diff --git a/src/sysselect.h b/src/sysselect.h
index 45cc22bc4cb..029a913f324 100644
--- a/src/sysselect.h
+++ b/src/sysselect.h
@@ -29,6 +29,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
29 where w32 needs it, but not where sysselect.h is included. The w32 29 where w32 needs it, but not where sysselect.h is included. The w32
30 definitions in w32.h are incompatible with the below. */ 30 definitions in w32.h are incompatible with the below. */
31#ifndef WINDOWSNT 31#ifndef WINDOWSNT
32#ifndef USE_POLL
32#ifdef FD_SET 33#ifdef FD_SET
33#ifndef FD_SETSIZE 34#ifndef FD_SETSIZE
34#define FD_SETSIZE 64 35#define FD_SETSIZE 64
@@ -43,6 +44,37 @@ typedef int fd_set;
43#define FD_ISSET(n, p) (*(p) & (1 << (n))) 44#define FD_ISSET(n, p) (*(p) & (1 << (n)))
44#define FD_ZERO(p) (*(p) = 0) 45#define FD_ZERO(p) (*(p) = 0)
45#endif /* no FD_SET */ 46#endif /* no FD_SET */
47#define EMACS_MAX_FD FD_SETSIZE
48#else /* no USE_POLL */
49#define EMACS_MAX_FD (10 * FD_SETSIZE)
50#define fd_set emacs_fd_set
51#define pselect emacs_pselect
52#undef FD_CLR
53#undef FD_ISSET
54#undef FD_SET
55#undef FD_ZERO
56
57typedef struct {
58 EMACS_UINT bits[EMACS_MAX_FD / EMACS_UINT_WIDTH];
59} emacs_fd_set;
60
61/* standard access macros */
62#define FD_SET(n, p) \
63 do { \
64 if ((n) < EMACS_MAX_FD) { \
65 (p)->bits[(n)/EMACS_UINT_WIDTH] |= (1 << (n)%EMACS_UINT_WIDTH); \
66 } \
67 } while (0)
68#define FD_CLR(n, p) \
69 do { \
70 if ((n) < EMACS_MAX_FD) { \
71 (p)->bits[(n)/EMACS_UINT_WIDTH] &= ~(1 << (n)%EMACS_UINT_WIDTH); \
72 } \
73 } while (0)
74#define FD_ISSET(n, p) ((n) < EMACS_MAX_FD ? ((p)->bits[(n)/EMACS_UINT_WIDTH] & (1 << (n)%EMACS_UINT_WIDTH)) : 0)
75#define FD_ZERO(p) memset((p), 0, sizeof(emacs_fd_set))
76#include "syspoll.h"
77#endif /* no USE_POLL */
46#endif /* not WINDOWSNT */ 78#endif /* not WINDOWSNT */
47 79
48#if !defined (HAVE_SELECT) 80#if !defined (HAVE_SELECT)
@@ -66,21 +98,21 @@ INLINE_HEADER_BEGIN
66INLINE void 98INLINE void
67fd_CLR (int fd, fd_set *set) 99fd_CLR (int fd, fd_set *set)
68{ 100{
69 eassume (0 <= fd && fd < FD_SETSIZE); 101 eassume (0 <= fd && fd < EMACS_MAX_FD);
70 FD_CLR (fd, set); 102 FD_CLR (fd, set);
71} 103}
72 104
73INLINE bool 105INLINE bool
74fd_ISSET (int fd, fd_set *set) 106fd_ISSET (int fd, fd_set *set)
75{ 107{
76 eassume (0 <= fd && fd < FD_SETSIZE); 108 eassume (0 <= fd && fd < EMACS_MAX_FD);
77 return FD_ISSET (fd, set) != 0; 109 return FD_ISSET (fd, set) != 0;
78} 110}
79 111
80INLINE void 112INLINE void
81fd_SET (int fd, fd_set *set) 113fd_SET (int fd, fd_set *set)
82{ 114{
83 eassume (0 <= fd && fd < FD_SETSIZE); 115 eassume (0 <= fd && fd < EMACS_MAX_FD);
84 FD_SET (fd, set); 116 FD_SET (fd, set);
85} 117}
86 118