// abstraction layer for filesystems #define FOOLOS_MODULE_NAME "mount" #include "fs.h" #include "ext2.h" static uint32_t root_ext2_ramimage=0; // // returns number of entries in the directory specified by name. // fills 0-max into *dirs int fs_readdir(const char *name,fs_dirent *dirs,int max) { int inode_nr=ext2_filename_to_inode(root_ext2_ramimage,name); if(inode_nr<1)return -1; return ext2_read_dir(root_ext2_ramimage, inode_nr,dirs,max); // TODO: hardcoded, fix this } void fs_mount(multiboot_information *info) { // deinit modules memory if(info->flags&&1<<3) { multiboot_mod *mod=info->mods_addr; for(int i=0;imods_count;i++) { log(FOOLOS_MODULE_NAME,5,"mounting mod from 0x%08X-0x%08X : %s", mod->mod_start,mod->mod_end, mod->string); //pmmngr_deinit_region(mod->mod_start,((uint32_t)mod->mod_end-(uint32_t)mod->mod_start)+1); root_ext2_ramimage=mod->mod_start; mod++; } } } void fs_content(char *path, uint32_t dest, uint32_t max_bytes) { int inode= ext2_filename_to_inode(root_ext2_ramimage, path); ext2_inode_content(root_ext2_ramimage,inode,dest,max_bytes); } uint32_t fs_get_root_ext2_ramimage() { return root_ext2_ramimage; }