diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-12-13 16:14:43 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-12-16 15:35:51 +0100 |
commit | 06ad80cbdadd3fb79da4f1245731f2c8a59f7ffd (patch) | |
tree | a71be2cab7d2f70ebaa65df726aa8e5b5377f7c5 /freebsd/sys/kern/sys_socket.c | |
parent | BPF(4): Add support (diff) | |
download | rtems-libbsd-06ad80cbdadd3fb79da4f1245731f2c8a59f7ffd.tar.bz2 |
SOCKET(2): Add some FCNTL(2) support
Diffstat (limited to 'freebsd/sys/kern/sys_socket.c')
-rw-r--r-- | freebsd/sys/kern/sys_socket.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/freebsd/sys/kern/sys_socket.c b/freebsd/sys/kern/sys_socket.c index 08777991..3508f94f 100644 --- a/freebsd/sys/kern/sys_socket.c +++ b/freebsd/sys/kern/sys_socket.c @@ -470,6 +470,21 @@ rtems_bsd_soo_close(rtems_libio_t *iop) return rtems_bsd_error_to_status_and_errno(error); } +static int +rtems_bsd_soo_fcntl(rtems_libio_t *iop, int cmd) +{ + int error = 0; + + if (cmd == F_SETFL) { + struct file *fp = rtems_bsd_iop_to_fp(iop); + int nbio = iop->flags & LIBIO_FLAGS_NO_DELAY; + + error = soo_ioctl(fp, FIONBIO, &nbio, NULL, NULL); + } + + return rtems_bsd_error_to_status_and_errno(error); +} + const rtems_filesystem_file_handlers_r socketops = { .open_h = rtems_filesystem_default_open, .close_h = rtems_bsd_soo_close, @@ -481,7 +496,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_bsd_soo_fcntl, .poll_h = rtems_bsd_soo_poll, .kqfilter_h = rtems_bsd_soo_kqfilter }; |