mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-02 07:28:21 +00:00
open: handle O_CREAT flag
This commit is contained in:
+14
-2
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user