mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 23:18:21 +00:00
open: handle O_CREAT flag
This commit is contained in:
+15
-3
@@ -45,15 +45,27 @@ syscallret syscall_open(const char* pathname, int flags, mode_t mode){
|
||||
|
||||
vnode_t* file = NULL;
|
||||
|
||||
retry:
|
||||
|
||||
size_t ret = vfs_open(&file,
|
||||
*name == '/' ? proc->root : proc->cwd,
|
||||
*name == '/' ? name + 1 : name
|
||||
);
|
||||
|
||||
if(ret == ENOENT && (flags & O_CREAT)){
|
||||
printf("O_CREAT NOT SUPPORTED YET!\n");
|
||||
retv.errno = ENOENT;
|
||||
goto _fail;
|
||||
ret = vfs_create(
|
||||
*name == '/' ? proc->root : proc->cwd,
|
||||
name, mode);
|
||||
|
||||
if(ret){
|
||||
retv.errno = ret;
|
||||
goto _fail;
|
||||
}
|
||||
|
||||
flags ^= O_CREAT; // remove O CREAT from flags
|
||||
|
||||
goto retry;
|
||||
|
||||
}
|
||||
else if(ret){
|
||||
retv.errno = ret;
|
||||
|
||||
Reference in New Issue
Block a user