diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-10-23 16:10:26 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-10-31 13:18:50 +0100 |
commit | facf9dcea6ee0f97d4404a1734909c762e91559b (patch) | |
tree | 6eea3929a60657daad04b8b8c48400c2b569e6d3 /freebsd/sys/kern/sys_socket.c | |
parent | sleep01: New test (diff) | |
download | rtems-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.c | 27 |
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__ */ |