summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern/sys_generic.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-09-23 14:27:32 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-09-23 14:29:00 +0200
commitcff1625f2787e08f33e67f949c0722c0aa05f618 (patch)
tree0874b63641d70eccd26af7a11c04b839c0157641 /freebsd/sys/kern/sys_generic.c
parenttest/syscalls01: Fix sporadic test failures (diff)
downloadrtems-libbsd-cff1625f2787e08f33e67f949c0722c0aa05f618.tar.bz2
Add pselect()
Diffstat (limited to 'freebsd/sys/kern/sys_generic.c')
-rw-r--r--freebsd/sys/kern/sys_generic.c37
1 files changed, 37 insertions, 0 deletions
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__ */
/*