use guile subrs
[bpt/emacs.git] / src / sysselect.h
CommitLineData
3ef31cb5 1/* sysselect.h - System-dependent definitions for the select function.
ba318903 2 Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
3ef31cb5
KH
3
4This file is part of GNU Emacs.
5
b9b1cc14 6GNU Emacs is free software: you can redistribute it and/or modify
3ef31cb5 7it under the terms of the GNU General Public License as published by
b9b1cc14
GM
8the Free Software Foundation, either version 3 of the License, or
9(at your option) any later version.
3ef31cb5
KH
10
11GNU Emacs is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
b9b1cc14 17along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
3ef31cb5 18
5897da1d
PE
19#ifndef SYSSELECT_H
20#define SYSSELECT_H 1
21
0d23c240 22#ifndef DOS_NT
3ef31cb5 23#include <sys/select.h>
388cdec0 24#endif
3ef31cb5 25
a583bbef
EZ
26/* The w32 build defines select stuff in w32.h, which is included
27 where w32 needs it, but not where sysselect.h is included. The w32
28 definitions in w32.h are incompatible with the below. */
29#ifndef WINDOWSNT
3ef31cb5 30#ifdef FD_SET
d486344e
PE
31#ifndef FD_SETSIZE
32#define FD_SETSIZE 64
3ef31cb5 33#endif
3ef31cb5 34#else /* no FD_SET */
d486344e
PE
35#define FD_SETSIZE 32
36typedef int fd_set;
3ef31cb5
KH
37
38/* Define the macros to access a single-int bitmap of descriptors. */
39#define FD_SET(n, p) (*(p) |= (1 << (n)))
40#define FD_CLR(n, p) (*(p) &= ~(1 << (n)))
41#define FD_ISSET(n, p) (*(p) & (1 << (n)))
42#define FD_ZERO(p) (*(p) = 0)
43#endif /* no FD_SET */
a583bbef 44#endif /* not WINDOWSNT */
3ef31cb5 45
4624371d 46#if !defined (HAVE_SELECT)
3ef31cb5
KH
47#define select sys_select
48#endif
0d23c240 49
c9240d7a 50#ifdef MSDOS
0d23c240
EZ
51#define pselect sys_select
52#endif
5897da1d 53
71b2605c 54#ifndef WINDOWSNT
5897da1d
PE
55INLINE_HEADER_BEGIN
56
57/* Check for out-of-range errors if ENABLE_CHECKING is defined. */
58
59INLINE void
60fd_CLR (int fd, fd_set *set)
61{
62 eassume (0 <= fd && fd < FD_SETSIZE);
63 FD_CLR (fd, set);
64}
65
66INLINE bool
67fd_ISSET (int fd, fd_set *set)
68{
69 eassume (0 <= fd && fd < FD_SETSIZE);
70 return FD_ISSET (fd, set) != 0;
71}
72
73INLINE void
74fd_SET (int fd, fd_set *set)
75{
76 eassume (0 <= fd && fd < FD_SETSIZE);
77 FD_SET (fd, set);
78}
79
80#undef FD_CLR
81#undef FD_ISSET
82#undef FD_SET
83#define FD_CLR(fd, set) fd_CLR (fd, set)
84#define FD_ISSET(fd, set) fd_ISSET (fd, set)
85#define FD_SET(fd, set) fd_SET (fd, set)
86
87INLINE_HEADER_END
88
71b2605c
EZ
89#endif /* !WINDOWSNT */
90
5897da1d 91#endif