summaryrefslogtreecommitdiff
path: root/fs/fs.c
blob: 253be985f6fbb05796e8b0891b8afa951e674c22 (plain)
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;
}