From cff1625f2787e08f33e67f949c0722c0aa05f618 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 23 Sep 2019 14:27:32 +0200 Subject: Add pselect() --- freebsd/sys/kern/sys_generic.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'freebsd/sys/kern') diff --git a/freebsd/sys/kern/sys_generic.c b/freebsd/sys/kern/sys_generic.c index 24da3934..cc208d6e 100644 --- a/freebsd/sys/kern/sys_generic.c +++ b/freebsd/sys/kern/sys_generic.c @@ -1179,6 +1179,43 @@ select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, rtems_set_errno_and_return_minus_one(error); } } + +int +pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, + const struct timespec *timeout, const sigset_t *set) +{ + struct thread *td; + int error; + + if (set != NULL) { + rtems_set_errno_and_return_minus_one(ENOSYS); + } + + td = rtems_bsd_get_curthread_or_null(); + + if (td != NULL) { + struct timeval tv; + struct timeval *tvp; + + if (timeout != NULL) { + TIMESPEC_TO_TIMEVAL(&tv, timeout); + tvp = &tv; + } else { + tvp = NULL; + } + + error = kern_select(td, nfds, readfds, writefds, errorfds, + tvp, NFDBITS); + } else { + error = ENOMEM; + } + + if (error == 0) { + return td->td_retval[0]; + } else { + rtems_set_errno_and_return_minus_one(error); + } +} #endif /* __rtems__ */ /* -- cgit v1.2.3