summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern
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:28:42 +0200
commitd06c638d7ba9511460f48f4815686cef7cc80593 (patch)
tree8f2be263575398b78e33da714593de615c819c8f /freebsd/sys/kern
parenttest/syscalls01: Fix sporadic test failures (diff)
downloadrtems-libbsd-d06c638d7ba9511460f48f4815686cef7cc80593.tar.bz2
Add pselect()
Diffstat (limited to 'freebsd/sys/kern')
-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 dc7f3f7b..5032fa93 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__ */
/*