svn commit: r286323 - head/sys/compat/cloudabi

Ed Schouten ed at FreeBSD.org
Wed Aug 5 16:15:44 UTC 2015


Author: ed
Date: Wed Aug  5 16:15:43 2015
New Revision: 286323
URL: https://svnweb.freebsd.org/changeset/base/286323

Log:
  Make fcntl(F_SETFL) work.
  
  The stat_put() system call can be used to modify file descriptor
  attributes, such as flags, but also Capsicum permission bits. Support
  for changing Capsicum bits will be added as soon as its dependent
  changes have been pushed through code review.
  
  Obtained from:	https://github.com/NuxiNL/freebsd

Modified:
  head/sys/compat/cloudabi/cloudabi_fd.c

Modified: head/sys/compat/cloudabi/cloudabi_fd.c
==============================================================================
--- head/sys/compat/cloudabi/cloudabi_fd.c	Wed Aug  5 15:57:08 2015	(r286322)
+++ head/sys/compat/cloudabi/cloudabi_fd.c	Wed Aug  5 16:15:43 2015	(r286323)
@@ -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


More information about the svn-src-all mailing list