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
@@ -44,6 +44,8 @@ syscallret syscall_open(const char* pathname, int flags, mode_t mode){
|
|||||||
fd->offset = 0;
|
fd->offset = 0;
|
||||||
|
|
||||||
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,
|
||||||
@@ -51,9 +53,19 @@ syscallret syscall_open(const char* pathname, int flags, mode_t mode){
|
|||||||
);
|
);
|
||||||
|
|
||||||
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,
|
||||||
goto _fail;
|
name, mode);
|
||||||
|
|
||||||
|
if(ret){
|
||||||
|
retv.errno = ret;
|
||||||
|
goto _fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
flags ^= O_CREAT; // remove O CREAT from flags
|
||||||
|
|
||||||
|
goto retry;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(ret){
|
else if(ret){
|
||||||
retv.errno = ret;
|
retv.errno = ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user