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.
This commit is contained in:
Ed Schouten 2015-07-28 06:50:47 +00:00
parent cec575201a
commit 29515a68a5

View File

@ -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