still working on a more robust vfs

This commit is contained in:
2026-07-11 10:33:08 -05:00
parent 032a35206a
commit 92748fd258
8 changed files with 381 additions and 318 deletions

View File

@@ -16,7 +16,7 @@ vfs_node_t* vfs_create_root() {
root->flags |= VFS_DIRECTORY;
root->size = 0;
root->finddir = NULL;
root->find = NULL;
return root;
}
@@ -27,10 +27,9 @@ void vfs_mount(vfs_node_t* _mnt, vfs_node_t* _fs) {
}
vfs_node_t* vfs_find(const char* path) {
if (path[0] != '/') return NULL;
vfs_node_t* current = root;
char* sav;
char* sav = NULL;
size_t path_sz = strlen(path) + 1;
char* path_cpy = kalloc(path_sz);
@@ -38,25 +37,36 @@ vfs_node_t* vfs_find(const char* path) {
memcpy(path, path_cpy, path_sz);
char* tkn = strtok_r(path_cpy, "/", &sav);
while (tkn != NULL) {
kprintf("Found tkn: %s\n");
if (!current || !current->find) {
current = NULL;
break;
}
current = current->find(current, tkn);
if (current == NULL) {
break;
}
tkn = strtok_r(NULL, "/", &sav);
}
kfree(path_cpy);
const char* cmp = path + 1;
if (*cmp == '\0') return current;
if (current->finddir) {
return current->finddir(current, cmp);
}
return NULL;
}
vfs_node_t* vfs_mkdir(vfs_node_t* parent, const char* name) {
vfs_node_t* node = kalloc(sizeof(vfs_node_t));
if (!parent || !name) {
return NULL;
}
if (strlen(name) == 0) {
return NULL;
}
return parent->mkdir(parent, name);
}
int vfs_open(const char* _path, int flags) {