1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
// 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;i<info->mods_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;
}
|