summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern/sys_generic.c
diff options
context:
space:
mode:
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__ */
/*