Commit 8cb98b3f authored by Willy Tarreau's avatar Willy Tarreau Committed by Paul E. McKenney

tools/nolibc/types: move the FD_* functions to macros in types.h

FD_SET, FD_CLR, FD_ISSET, FD_ZERO are often expected to be macros and
not functions. In addition we already have a file dedicated to such
macros and types used by syscalls, it's types.h, so let's move them
there and turn them to macros. FD_CLR() and FD_ISSET() were missing,
so they were added. FD_ZERO() now deals with its own loop so that it
doesn't rely on memset() that sets one byte at a time.

Cc: David Laight <David.Laight@aculab.com>
Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 50850c38
...@@ -118,20 +118,6 @@ const char *ltoa(long in) ...@@ -118,20 +118,6 @@ const char *ltoa(long in)
/* Here come a few helper functions */ /* Here come a few helper functions */
static __attribute__((unused))
void FD_ZERO(fd_set *set)
{
memset(set, 0, sizeof(*set));
}
static __attribute__((unused))
void FD_SET(int fd, fd_set *set)
{
if (fd < 0 || fd >= FD_SETSIZE)
return;
set->fd32[fd / 32] |= 1 << (fd & 31);
}
/* WARNING, it only deals with the 4096 first majors and 256 first minors */ /* WARNING, it only deals with the 4096 first majors and 256 first minors */
static __attribute__((unused)) static __attribute__((unused))
dev_t makedev(unsigned int major, unsigned int minor) dev_t makedev(unsigned int major, unsigned int minor)
......
...@@ -75,6 +75,36 @@ typedef struct { ...@@ -75,6 +75,36 @@ typedef struct {
uint32_t fd32[FD_SETSIZE / 32]; uint32_t fd32[FD_SETSIZE / 32];
} fd_set; } fd_set;
#define FD_CLR(fd, set) do { \
fd_set *__set = (set); \
int __fd = (fd); \
if (__fd >= 0) \
__set->fd32[__fd / 32] &= ~(1U << (__fd & 31)); \
} while (0)
#define FD_SET(fd, set) do { \
fd_set *__set = (set); \
int __fd = (fd); \
if (__fd >= 0) \
__set->fd32[__fd / 32] |= 1U << (__fd & 31); \
} while (0)
#define FD_ISSET(fd, set) ({ \
fd_set *__set = (set); \
int __fd = (fd); \
int __r = 0; \
if (__fd >= 0) \
__r = !!(__set->fd32[__fd / 32] & 1U << (__fd & 31)); \
__r; \
})
#define FD_ZERO(set) do { \
fd_set *__set = (set); \
int __idx; \
for (__idx = 0; __idx < FD_SETSIZE / 32; __idx ++) \
__set->fd32[__idx] = 0; \
} while (0)
/* for poll() */ /* for poll() */
struct pollfd { struct pollfd {
int fd; int fd;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment