23 lines
595 B
C++
23 lines
595 B
C++
#include <poll.h>
|
|
#include <pthread.h>
|
|
#include <sys/syscall.h>
|
|
#include <unistd.h>
|
|
|
|
int poll(struct pollfd fds[], nfds_t nfds, int timeout)
|
|
{
|
|
pthread_testcancel();
|
|
if (timeout < 0)
|
|
return ppoll(fds, nfds, nullptr, nullptr);
|
|
const timespec timeout_ts {
|
|
.tv_sec = static_cast<time_t>(timeout / 1000),
|
|
.tv_nsec = static_cast<long>(timeout % 1000),
|
|
};
|
|
return ppoll(fds, nfds, &timeout_ts, nullptr);
|
|
}
|
|
|
|
int ppoll(struct pollfd fds[], nfds_t nfds, const struct timespec* timeout, const sigset_t* sigmask)
|
|
{
|
|
pthread_testcancel();
|
|
return syscall(SYS_PPOLL, fds, nfds, timeout, sigmask);
|
|
}
|