From c2f258f1bb74251a538ad26109fb5e85d5e9acad Mon Sep 17 00:00:00 2001 From: notsomeidiot123 Date: Fri, 26 Jun 2026 18:52:59 -0400 Subject: [PATCH] function defs for ramfs --- src/kernel/shared/memory.h | 2 ++ src/kernel/system/ramfs.c | 34 +++++++++++++++++++++++++++++++++- src/kernel/system/ramfs.h | 9 ++++++++- src/kernel/system/vfs.c | 3 ++- src/kernel/system/vfs.h | 2 +- 5 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/kernel/shared/memory.h b/src/kernel/shared/memory.h index 888a138..28d0aa3 100644 --- a/src/kernel/shared/memory.h +++ b/src/kernel/shared/memory.h @@ -39,6 +39,8 @@ #define KMALLOC_LINK_NEXT 2 #define KMALLOC_LINK_LAST 4 +#define PAGE_SIZE_BYTES 4096 + typedef struct BIOS_data{ uint16_t com_ports[4]; uint16_t lpt_ports[3]; diff --git a/src/kernel/system/ramfs.c b/src/kernel/system/ramfs.c index a957868..5c3d314 100644 --- a/src/kernel/system/ramfs.c +++ b/src/kernel/system/ramfs.c @@ -9,6 +9,12 @@ fileops_t ramfs_ops = { ramfs_create, + ramfs_delete, + ramfs_write, + ramfs_read, + ramfs_open, + ramfs_close, + ramfs_rfopen, }; vfile_t root_dir = {"/", FS_FILE_IS_DIR | FS_FILE_SYSTEM, &ramfs_ops}; @@ -16,13 +22,39 @@ vfile_t root_dir = {"/", FS_FILE_IS_DIR | FS_FILE_SYSTEM, &ramfs_ops}; void ramfs_init(){ mlog(MODULE_NAME, "Initializing VFS\n", MLOG_PRINT); root_dir.private = kmalloc(1); - root_dir.size = 4096;//one page is 4096 bytes + root_dir.size = PAGE_SIZE_BYTES;//one page is 4096 bytes +} + +vfile_t *resolve_path(char *pathname){ + } vfile_t *ramfs_create(char *path, FS_FILE_FLAGS flags){ + return 0; } +int ramfs_delete(vfile_t *file){ + +} +int ramfs_write(vfile_t *file, char *buffer, uint32_t offset, uint32_t count){ + +} +int ramfs_read(vfile_t *file, char *buffer, uint32_t offset, uint32_t count){ + +} +vfile_t *ramfs_open(char *path){ + +} +void ramfs_close(vfile_t *file){ + file->refcount--; + if(file->refcount < 0) file->refcount = 0; + return; +} +vfile_t *ramfs_rfopen(char *name, vfile_t *parent){ + +} + vfile_t *get_root_dir(){ return &root_dir; } \ No newline at end of file diff --git a/src/kernel/system/ramfs.h b/src/kernel/system/ramfs.h index 46b7274..e012558 100644 --- a/src/kernel/system/ramfs.h +++ b/src/kernel/system/ramfs.h @@ -4,4 +4,11 @@ void ramfs_init(); vfile_t *ramfs_create(char *path, FS_FILE_FLAGS flags); //Will never create a new reference -vfile_t *get_root_dir(); \ No newline at end of file +vfile_t *get_root_dir(); + +int ramfs_delete(vfile_t *file); +int ramfs_write(vfile_t *file, char *buffer, uint32_t offset, uint32_t count); +int ramfs_read(vfile_t *file, char *buffer, uint32_t offset, uint32_t count); +vfile_t *ramfs_open(char *path); +void ramfs_close(vfile_t *file); +vfile_t *ramfs_rfopen(char *name, vfile_t *parent); \ No newline at end of file diff --git a/src/kernel/system/vfs.c b/src/kernel/system/vfs.c index b1db590..af9f546 100644 --- a/src/kernel/system/vfs.c +++ b/src/kernel/system/vfs.c @@ -6,6 +6,7 @@ #define MODULE_NAME "KVFS" // !TODO: Modify code to become thread-safe +// 3 months later: does this count? // void add_file(vfile_t *vfile, vfile_t *current_dir){ @@ -80,7 +81,7 @@ vfile_t *rfopen(char *name, vfile_t *dir){ if(!dir || !name || !dir->fileops || !dir->fileops->rfopen){ return 0; } - return dir->fileops->rfopen(name); + return dir->fileops->rfopen(name, dir); } int readdir(vfile_t* file, vfile_t* buffer, uint32_t offset, uint32_t count){ diff --git a/src/kernel/system/vfs.h b/src/kernel/system/vfs.h index 1da5e1c..b9fd742 100644 --- a/src/kernel/system/vfs.h +++ b/src/kernel/system/vfs.h @@ -20,7 +20,7 @@ typedef struct fileops{ struct virtual_file *(*open)(char *path); void (*close)(struct virtual_file *file); // int (*readdir)(struct virtual_file* file, struct virtual_file *buffer, uint32_t count, uint32_t offset); - struct virtual_file *(*rfopen)(char *name); + struct virtual_file *(*rfopen)(char *name, struct virtual_file *parent); } fileops_t; typedef struct virtual_file{