mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
filesystems: fix checks for file existance
This commit is contained in:
+4
-1
@@ -98,6 +98,9 @@ void devfs_init(){
|
|||||||
|
|
||||||
int devfs_newdevice(char* name, int type, dev_t dev, mode_t mode){
|
int devfs_newdevice(char* name, int type, dev_t dev, mode_t mode){
|
||||||
|
|
||||||
|
if(hashtable_get(&devnodes, name))
|
||||||
|
return EEXIST;
|
||||||
|
|
||||||
vnode_t* node = vfs_newnode(name, fs, 0);
|
vnode_t* node = vfs_newnode(name, fs, 0);
|
||||||
if(!node)
|
if(!node)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
@@ -106,7 +109,7 @@ int devfs_newdevice(char* name, int type, dev_t dev, mode_t mode){
|
|||||||
vfs_destroynode(node);
|
vfs_destroynode(node);
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
node->st.st_rdev = dev;
|
node->st.st_rdev = dev;
|
||||||
node->st.st_mode = MAKETYPE(type) | mode;
|
node->st.st_mode = MAKETYPE(type) | mode;
|
||||||
node->st.st_ino = fs->data;
|
node->st.st_ino = fs->data;
|
||||||
|
|||||||
+11
-8
@@ -239,15 +239,16 @@ int vfs_create(dirnode_t* ref, char* path, mode_t mode){
|
|||||||
|
|
||||||
int result = vfs_resolvepath(&buff, &parent, ref, path, name);
|
int result = vfs_resolvepath(&buff, &parent, ref, path, name);
|
||||||
|
|
||||||
|
if(buff){
|
||||||
|
spinlock_release(&lock);
|
||||||
|
return EEXIST;
|
||||||
|
}
|
||||||
|
|
||||||
if(!parent){
|
if(!parent){
|
||||||
spinlock_release(&lock);
|
spinlock_release(&lock);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(buff){
|
|
||||||
spinlock_release(&lock);
|
|
||||||
return EEXIST;
|
|
||||||
}
|
|
||||||
result = parent->vnode.fs->calls->create(parent, name, mode);
|
result = parent->vnode.fs->calls->create(parent, name, mode);
|
||||||
|
|
||||||
spinlock_release(&lock);
|
spinlock_release(&lock);
|
||||||
@@ -268,14 +269,16 @@ int vfs_mkdir(dirnode_t* ref, char* path, mode_t mode){
|
|||||||
|
|
||||||
int result = vfs_resolvepath(&buff, &parent, ref, path, name);
|
int result = vfs_resolvepath(&buff, &parent, ref, path, name);
|
||||||
|
|
||||||
if(!parent){
|
|
||||||
spinlock_release(&lock);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if(buff){
|
if(buff){
|
||||||
spinlock_release(&lock);
|
spinlock_release(&lock);
|
||||||
return EEXIST;
|
return EEXIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!parent){
|
||||||
|
spinlock_release(&lock);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
result = parent->vnode.fs->calls->mkdir(parent, name, mode);
|
result = parent->vnode.fs->calls->mkdir(parent, name, mode);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user