From 3534b428629be185e096be99e3bd5fdfe32d5544 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Thu, 18 Sep 2014 18:55:44 +0000 Subject: initial commit with rc for skalibs-2.0.0.0 --- src/libstddjb/iopause_ppoll.c | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/libstddjb/iopause_ppoll.c (limited to 'src/libstddjb/iopause_ppoll.c') diff --git a/src/libstddjb/iopause_ppoll.c b/src/libstddjb/iopause_ppoll.c new file mode 100644 index 0000000..b181d0a --- /dev/null +++ b/src/libstddjb/iopause_ppoll.c @@ -0,0 +1,44 @@ +/* ISC license. */ + +#include + +#ifdef SKALIBS_HASPPOLL + +#define _GNU_SOURCE +#include +#include +#include +#include +#include + +int iopause_ppoll (iopause_fd *x, unsigned int len, tain_t const *deadline, tain_t const *stamp) +{ + struct timespec ts = { .tv_sec = 0, .tv_nsec = 0 } ; + if (deadline && tain_less(stamp, deadline)) + { + tain_t delta ; + tain_sub(&delta, deadline, stamp) ; + if (!timespec_from_tain_relative(&ts, &delta)) + { + if (errno != ERANGE) return -1 ; + else deadline = 0 ; + } + } + return ppoll(x, len, deadline ? &ts : 0, 0) ; +} + +#else + +#include +#include + +int iopause_ppoll (iopause_fd *x, unsigned int len, tain_t const *deadline, tain_t const *stamp) +{ + (void)x ; + (void)len ; + (void)deadline ; + (void)stamp ; + return (errno = ENOSYS, -1) ; +} + +#endif -- cgit v1.2.3