From 38cca8acc0dc1aec92dcffcbf580e3615285e657 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Tue, 6 May 2025 11:34:48 -0600 Subject: [PATCH] Fix select macros --- include/bits/sys/select.h | 26 +++++++++++++------------- src/header/sys_select/mod.rs | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/bits/sys/select.h b/include/bits/sys/select.h index f6818e02a1..843e1a0745 100644 --- a/include/bits/sys/select.h +++ b/include/bits/sys/select.h @@ -1,23 +1,23 @@ #ifndef _BITS_SYS_SELECT_H #define _BITS_SYS_SELECT_H +// from musl license MIT { #define FD_SETSIZE 1024 -#define NFDBITS (8 * sizeof(unsigned long)) -typedef struct fd_set { - unsigned long fds_bits[FD_SETSIZE / NFDBITS]; +typedef unsigned long fd_mask; + +typedef struct { + unsigned long fds_bits[FD_SETSIZE / 8 / sizeof(long)]; } fd_set; -#define _FD_INDEX(fd) ((fd) / NFDBITS) -#define _FD_BITMASK(fd) (1UL << ((fd) & NFDBITS)) +#define FD_ZERO(s) do { int __i; unsigned long *__b=(s)->fds_bits; for(__i=sizeof (fd_set)/sizeof (long); __i; __i--) *__b++=0; } while(0) +#define FD_SET(d, s) ((s)->fds_bits[(d)/(8*sizeof(long))] |= (1UL<<((d)%(8*sizeof(long))))) +#define FD_CLR(d, s) ((s)->fds_bits[(d)/(8*sizeof(long))] &= ~(1UL<<((d)%(8*sizeof(long))))) +#define FD_ISSET(d, s) !!((s)->fds_bits[(d)/(8*sizeof(long))] & (1UL<<((d)%(8*sizeof(long))))) -#define FD_ZERO(set) for (int i = 0; i < sizeof((set)->fds_bits) / sizeof(unsigned long); i += 1) { \ - (set)->fds_bits[i] = 0; \ - } - -#define FD_SET(fd, set) ((set)->fds_bits[_FD_INDEX(fd)] |= _FD_BITMASK(fd)) -#define FD_CLR(fd, set) ((set)->fds_bits[_FD_INDEX(fd)] &= ~(_FD_BITMASK(fd))) - -#define FD_ISSET(fd, set) (((set)->fds_bits[_FD_INDEX(fd)] & _FD_BITMASK(fd)) == _FD_BITMASK(fd)) +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define NFDBITS (8*(int)sizeof(long)) +#endif +// } from musl license MIT #endif diff --git a/src/header/sys_select/mod.rs b/src/header/sys_select/mod.rs index 22a981d196..80078da9cd 100644 --- a/src/header/sys_select/mod.rs +++ b/src/header/sys_select/mod.rs @@ -20,7 +20,7 @@ use crate::{ // fd_set is also defined in C because cbindgen is incompatible with mem::size_of booo pub const FD_SETSIZE: usize = 1024; -type bitset = BitSet<[u64; FD_SETSIZE / (8 * mem::size_of::())]>; +type bitset = BitSet<[c_ulong; FD_SETSIZE / (8 * mem::size_of::())]>; #[repr(C)] pub struct fd_set {