Author: ed
Date: Tue Jul 28 06:50:47 2015
New Revision: 285931
URL: https://svnweb.freebsd.org/changeset/base/285931

Log:
  Implement directory and FIFO creation.
  
  The file_create() system call can be used to create files of a given
  type. Right now it can only be used to create directories and FIFOs. As
  CloudABI does not expose filesystem permissions, this system call lacks
  a mode argument. Simply use 0777 or 0666 depending on the file type.

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

Modified: head/sys/compat/cloudabi/cloudabi_file.c
==============================================================================
--- head/sys/compat/cloudabi/cloudabi_file.c    Tue Jul 28 06:36:49 2015        
(r285930)
+++ head/sys/compat/cloudabi/cloudabi_file.c    Tue Jul 28 06:50:47 2015        
(r285931)
@@ -137,9 +137,31 @@ int
 cloudabi_sys_file_create(struct thread *td,
     struct cloudabi_sys_file_create_args *uap)
 {
+       char *path;
+       int error;
 
-       /* Not implemented. */
-       return (ENOSYS);
+       error = copyin_path(uap->path, uap->pathlen, &path);
+       if (error != 0)
+               return (error);
+
+       /*
+        * CloudABI processes cannot interact with UNIX credentials and
+        * permissions. Depend on the umask that is set prior to
+        * execution to restrict the file permissions.
+        */
+       switch (uap->type) {
+       case CLOUDABI_FILETYPE_DIRECTORY:
+               error = kern_mkdirat(td, uap->fd, path, UIO_SYSSPACE, 0777);
+               break;
+       case CLOUDABI_FILETYPE_FIFO:
+               error = kern_mkfifoat(td, uap->fd, path, UIO_SYSSPACE, 0666);
+               break;
+       default:
+               error = EINVAL;
+               break;
+       }
+       cloudabi_freestr(path);
+       return (error);
 }
 
 int
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to