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:
parent
cec575201a
commit
29515a68a5
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user