diff --git a/LibC/sys/select.cpp b/LibC/sys/select.cpp new file mode 100644 index 0000000000..1c0d7c6aa7 --- /dev/null +++ b/LibC/sys/select.cpp @@ -0,0 +1,11 @@ +#include +#include +#include +#include + +int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout) +{ + Syscall::SC_select_params params { nfds, readfds, writefds, exceptfds, timeout }; + int rc = syscall(SC_select, ¶ms); + __RETURN_WITH_ERRNO(rc, rc, -1); +} diff --git a/LibC/sys/select.h b/LibC/sys/select.h new file mode 100644 index 0000000000..d978f28b44 --- /dev/null +++ b/LibC/sys/select.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include + +__BEGIN_DECLS + +#define FD_SETSIZE 64 +#define FD_ZERO(set) memset((set), 0, sizeof(fd_set)); +#define FD_CLR(fd, set) ((set)->bits[(fd / 8)] &= ~(1 << (fd) % 8)) +#define FD_SET(fd, set) ((set)->bits[(fd / 8)] |= (1 << (fd) % 8)) +#define FD_ISSET(fd, set) ((set)->bits[(fd / 8)] & (1 << (fd) % 8)) + +struct fd_set { + unsigned char bits[FD_SETSIZE / 8]; +}; + +int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout); + +__END_DECLS +