summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/compat/cloudabi/cloudabi_fd.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/sys/compat/cloudabi/cloudabi_fd.c b/sys/compat/cloudabi/cloudabi_fd.c
index 03d65bd..1fed2e7 100644
--- a/sys/compat/cloudabi/cloudabi_fd.c
+++ b/sys/compat/cloudabi/cloudabi_fd.c
@@ -503,9 +503,26 @@ int
cloudabi_sys_fd_stat_put(struct thread *td,
struct cloudabi_sys_fd_stat_put_args *uap)
{
+ cloudabi_fdstat_t fsb;
+ int error, oflags;
- /* Not implemented. */
- return (ENOSYS);
+ error = copyin(uap->buf, &fsb, sizeof(fsb));
+ if (error != 0)
+ return (error);
+
+ if (uap->flags == CLOUDABI_FDSTAT_FLAGS) {
+ /* Convert flags. */
+ oflags = 0;
+ if (fsb.fs_flags & CLOUDABI_FDFLAG_APPEND)
+ oflags |= O_APPEND;
+ if (fsb.fs_flags & CLOUDABI_FDFLAG_NONBLOCK)
+ oflags |= O_NONBLOCK;
+ if (fsb.fs_flags & (CLOUDABI_FDFLAG_SYNC |
+ CLOUDABI_FDFLAG_DSYNC | CLOUDABI_FDFLAG_RSYNC))
+ oflags |= O_SYNC;
+ return (kern_fcntl(td, uap->fd, F_SETFL, oflags));
+ }
+ return (EINVAL);
}
int
OpenPOWER on IntegriCloud