open: handle O_CREAT flag

This commit is contained in:
Matheus
2022-09-22 20:02:21 -03:00
parent b23d4f7c5b
commit 4f470fd023
+14 -2
View File
@@ -45,16 +45,28 @@ syscallret syscall_open(const char* pathname, int flags, mode_t mode){
vnode_t* file = NULL; vnode_t* file = NULL;
retry:
size_t ret = vfs_open(&file, size_t ret = vfs_open(&file,
*name == '/' ? proc->root : proc->cwd, *name == '/' ? proc->root : proc->cwd,
*name == '/' ? name + 1 : name *name == '/' ? name + 1 : name
); );
if(ret == ENOENT && (flags & O_CREAT)){ if(ret == ENOENT && (flags & O_CREAT)){
printf("O_CREAT NOT SUPPORTED YET!\n"); ret = vfs_create(
retv.errno = ENOENT; *name == '/' ? proc->root : proc->cwd,
name, mode);
if(ret){
retv.errno = ret;
goto _fail; goto _fail;
} }
flags ^= O_CREAT; // remove O CREAT from flags
goto retry;
}
else if(ret){ else if(ret){
retv.errno = ret; retv.errno = ret;
goto _fail; goto _fail;