xref: /drstd/dlibc/src/unix/platform/dragonos/c/dragonos_include/bits/sys/select.h (revision 9670759b785600bf6315e4173e46a602f16add7a)
1 #ifndef _BITS_SYS_SELECT_H
2 #define _BITS_SYS_SELECT_H
3 
4 #define FD_SETSIZE 1024
5 
6 typedef struct fd_set {
7     unsigned long fds_bits[FD_SETSIZE / (8 * sizeof(unsigned long))];
8 } fd_set;
9 
10 #define _FD_INDEX(fd) ((fd) / (8 * sizeof(unsigned long)))
11 #define _FD_BITMASK(fd) (1UL << ((fd) & (8 * sizeof(unsigned long) - 1)))
12 
13 #define FD_ZERO(set) for (int i = 0; i < sizeof((set)->fds_bits) / sizeof(unsigned long); i += 1) { \
14                          (set)->fds_bits[i] = 0; \
15                      }
16 
17 #define FD_SET(fd, set) ((set)->fds_bits[_FD_INDEX(fd)] |= _FD_BITMASK(fd))
18 #define FD_CLR(fd, set) ((set)->fds_bits[_FD_INDEX(fd)] &= ~(_FD_BITMASK(fd)))
19 
20 #define FD_ISSET(fd, set) (((set)->fds_bits[_FD_INDEX(fd)] & _FD_BITMASK(fd)) == _FD_BITMASK(fd))
21 
22 #endif
23