Redesign the VFS

This commit is contained in:
2025-09-03 17:32:08 +02:00
parent 8a12f23b69
commit afa4d383e0
7 changed files with 161 additions and 382 deletions

View File

@ -101,19 +101,36 @@ Proc *proc_spawnkern(void (*ent)(void), char *name) {
}
Proc *proc_spawnuser(char *mountpoint, char *path) {
VfsStat stat;
if (vfs_stat(mountpoint, path, &stat) != E_OK) {
VfsObj *vobj = vfs_open(mountpoint, path, VFS_FLAG_READ);
if (vobj == NULL) {
return NULL;
}
VfsStat stat;
if (vobj->stat(vobj, &stat) != E_OK) {
vfs_close(vobj);
return NULL;
}
if (stat.type != VFS_TYPE_FILE) {
vfs_close(vobj);
return NULL;
}
uint8_t *data = dlmalloc(stat.size);
if (vfs_read(mountpoint, path, data, stat.size, 0) != E_OK) {
if (data == NULL) {
vfs_close(vobj);
return NULL;
}
if (vobj->read(vobj, data, stat.size, 0) != E_OK) {
dlfree(data);
vfs_close(vobj);
return NULL;
}
vfs_close(vobj);
Proc *proc = dlmalloc(sizeof(*proc));
hal_memset(proc, 0, sizeof(*proc));
ksprintf(proc->name, "%s:%s", mountpoint, path);