Okay now we're done frfr... I hope...

This commit is contained in:
notsomeidiot123 2025-09-12 10:48:45 -04:00
parent ff9425c321
commit b24c215984
2 changed files with 34 additions and 13 deletions

View File

@ -63,6 +63,7 @@ void fcreate(char *name, VFILE_TYPE type, ...){
//create file in folder;
vfile_t *vfile = kmalloc(1);
vfile->type = type;
vfile->parent = current_dir;
uint32_t tmpnsize = strlen(tmp);
if(tmp[tmpnsize - 1] == '/'){
tmp[tmpnsize - 1] = 0;
@ -109,25 +110,42 @@ void fcreate(char *name, VFILE_TYPE type, ...){
void fdelete();
// navya was here https://github.com/novabansal
uint32_t fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count){
// a: a way to call RW functions from any given module
// OR
// b: specify a pointer to data that is written to virtual file in memory
// search through root directory
int fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count){
//sorry navya, I deleted the comment and it's not coming back :(
switch(file_entry->type){
case VFILE_DIRECTORY:
case VFILE_POINTER:
memcpy(byte_array, file_entry->access.data.ptr + offset, count);
return 0; //always successful. If it's not, there's been a page fault. Yk, quantum sort style.
break;
case VFILE_MOUNT:
mount_t *funcs = file_entry->access.data.ptr;
return funcs->write(file_entry, byte_array, offset, count);
case VFILE_PDIR:
case VFILE_FILE:
case VFILE_DEVICE:
file_entry->access.funcs.write(file_entry, byte_array, offset, count);
return file_entry->access.funcs.write(file_entry, byte_array, offset, count);
break;
}
}
uint32_t fread();
int fread(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count){
switch(file_entry->type){
case VFILE_DIRECTORY:
case VFILE_POINTER:
memcpy(file_entry->access.data.ptr + offset, byte_array, count);
return 0; //always successful. If it's not, there's been a page fault. Yk, quantum sort style.
break;
case VFILE_MOUNT:
mount_t *funcs = file_entry->access.data.ptr;
return funcs->read(file_entry, byte_array, offset, count);
case VFILE_PDIR:
case VFILE_FILE:
case VFILE_DEVICE:
return file_entry->access.funcs.read(file_entry, byte_array, offset, count);
break;
}
}
vfile_t *search_dir(char *name, vfile_t dir){
vfile_t **dir_data = (vfile_t **)dir.access.data.ptr;
@ -168,4 +186,6 @@ int fopen(char *name, vfile_t *file){
}
*file = *tmpfile;
return 0;
}
}
//who needs a way to delete things?
//TODO: Write a function to delete files

View File

@ -16,10 +16,11 @@ typedef struct virtual_file{
VFILE_TYPE type;
uint32_t id;//to be assigned by driver;
uint32_t mount_id;
struct virtual_file *parent;//should point to A: a virtual directory, or B: a mounted filesystem
union{
struct{
void (*read)(struct virtual_file *file, void *data, uint32_t offset, uint32_t count);
void (*write)(struct virtual_file *file, void *data, uint32_t offset, uint32_t count);
int (*read)(struct virtual_file *file, void *data, uint32_t offset, uint32_t count);
int (*write)(struct virtual_file *file, void *data, uint32_t offset, uint32_t count);
}funcs;
struct{
void *ptr;
@ -47,7 +48,7 @@ typedef struct mount_funcs{
void vfs_init();
void fcreate(char *name, VFILE_TYPE type, ...);
void fdelete();
uint32_t fwrite();
uint32_t fread();
int fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count);
int fread(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count);
vfile_t *search_dir(char *name, vfile_t dir);
int fopen(char *name, vfile_t *file);