summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern/sys_socket.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-10-23 16:10:26 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-10-31 13:18:50 +0100
commitfacf9dcea6ee0f97d4404a1734909c762e91559b (patch)
tree6eea3929a60657daad04b8b8c48400c2b569e6d3 /freebsd/sys/kern/sys_socket.c
parentsleep01: New test (diff)
downloadrtems-libbsd-facf9dcea6ee0f97d4404a1734909c762e91559b.tar.bz2
Use select() from FreeBSD
Diffstat (limited to 'freebsd/sys/kern/sys_socket.c')
-rw-r--r--freebsd/sys/kern/sys_socket.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/freebsd/sys/kern/sys_socket.c b/freebsd/sys/kern/sys_socket.c
index a748d8b1..19633aeb 100644
--- a/freebsd/sys/kern/sys_socket.c
+++ b/freebsd/sys/kern/sys_socket.c
@@ -325,7 +325,9 @@ rtems_bsd_soo_ioctl(rtems_libio_t *iop, ioctl_command_t request, void *buffer)
}
#endif /* __rtems__ */
-#ifndef __rtems__
+#ifdef __rtems__
+static
+#endif /* __rtems__ */
int
soo_poll(struct file *fp, int events, struct ucred *active_cred,
struct thread *td)
@@ -338,7 +340,27 @@ soo_poll(struct file *fp, int events, struct ucred *active_cred,
if (error)
return (error);
#endif
+#ifndef __rtems__
return (sopoll(so, events, fp->f_cred, td));
+#else /* __rtems__ */
+ return (sopoll(so, events, NULL, td));
+#endif /* __rtems__ */
+}
+#ifdef __rtems__
+static int
+rtems_bsd_soo_poll(rtems_libio_t *iop, int events)
+{
+ struct thread *td = rtems_bsd_get_curthread_or_null();
+ struct file *fp = rtems_bsd_iop_to_fp(iop);
+ int error;
+
+ if (td != NULL) {
+ error = soo_poll(fp, events, NULL, td);
+ } else {
+ error = ENOMEM;
+ }
+
+ return error;
}
#endif /* __rtems__ */
@@ -451,6 +473,7 @@ const rtems_filesystem_file_handlers_r socketops = {
.ftruncate_h = rtems_filesystem_default_ftruncate,
.fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
.fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
- .fcntl_h = rtems_filesystem_default_fcntl
+ .fcntl_h = rtems_filesystem_default_fcntl,
+ .poll_h = rtems_bsd_soo_poll
};
#endif /* __rtems__ */