1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero */ 6*10465441SEvalZero 7*10465441SEvalZero /* 8*10465441SEvalZero * File : libc_errno.h 9*10465441SEvalZero * 10*10465441SEvalZero * Change Logs: 11*10465441SEvalZero * Date Author Notes 12*10465441SEvalZero * 2017-10-30 Bernard The first version 13*10465441SEvalZero */ 14*10465441SEvalZero 15*10465441SEvalZero #ifndef LIBC_FDSET_H__ 16*10465441SEvalZero #define LIBC_FDSET_H__ 17*10465441SEvalZero 18*10465441SEvalZero #include <rtconfig.h> 19*10465441SEvalZero 20*10465441SEvalZero #if defined(RT_USING_NEWLIB) || defined(_WIN32) 21*10465441SEvalZero #include <sys/types.h> 22*10465441SEvalZero #if defined(HAVE_SYS_SELECT_H) 23*10465441SEvalZero #include <sys/select.h> 24*10465441SEvalZero #endif 25*10465441SEvalZero 26*10465441SEvalZero #else 27*10465441SEvalZero 28*10465441SEvalZero #ifdef SAL_USING_POSIX 29*10465441SEvalZero 30*10465441SEvalZero #ifdef FD_SETSIZE 31*10465441SEvalZero #undef FD_SETSIZE 32*10465441SEvalZero #endif 33*10465441SEvalZero 34*10465441SEvalZero #define FD_SETSIZE DFS_FD_MAX 35*10465441SEvalZero #endif 36*10465441SEvalZero 37*10465441SEvalZero # ifndef FD_SETSIZE 38*10465441SEvalZero # define FD_SETSIZE 32 39*10465441SEvalZero # endif 40*10465441SEvalZero 41*10465441SEvalZero # define NBBY 8 /* number of bits in a byte */ 42*10465441SEvalZero 43*10465441SEvalZero typedef long fd_mask; 44*10465441SEvalZero # define NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */ 45*10465441SEvalZero # ifndef howmany 46*10465441SEvalZero # define howmany(x,y) (((x)+((y)-1))/(y)) 47*10465441SEvalZero # endif 48*10465441SEvalZero 49*10465441SEvalZero /* We use a macro for fd_set so that including Sockets.h afterwards 50*10465441SEvalZero can work. */ 51*10465441SEvalZero typedef struct _types_fd_set { 52*10465441SEvalZero fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; 53*10465441SEvalZero } _types_fd_set; 54*10465441SEvalZero 55*10465441SEvalZero #define fd_set _types_fd_set 56*10465441SEvalZero 57*10465441SEvalZero # define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS))) 58*10465441SEvalZero # define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS))) 59*10465441SEvalZero # define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS))) 60*10465441SEvalZero # define FD_ZERO(p) memset((void*)(p), 0, sizeof(*(p))) 61*10465441SEvalZero 62*10465441SEvalZero #endif 63*10465441SEvalZero 64*10465441SEvalZero #endif 65