iloveos/include/fs.hpp

50 lines
1.5 KiB
C++

#ifndef FS_HPP
#define FS_HPP
#include "fs/datablock_manager.hpp"
#include "fs/fs_data_types.hpp"
#include "fs/inode_manager.hpp"
#include "fs_constants.hpp"
#include "rawdisk.hpp"
// TEMP:
class DatablockOperation;
class Fs {
public:
Fs(RawDisk *disk, bool load, u_int64_t user_inode_blocks = 0);
~Fs();
ssize_t read(INode_Data *inode_data, char buf[], size_t count, size_t offset);
ssize_t write(INode_Data *inode_data, const char buf[], size_t count,
size_t offset);
int truncate(INode_Data *inode_data, off_t length);
ssize_t lseek_next_data(INode_Data *inode_data, size_t offset);
ssize_t lseek_next_hole(INode_Data *inode_data, size_t offset);
int format();
// should probably be private but is not for testing
RawDisk *disk;
SuperBlock_Data superblock;
INode_Manager *inode_manager;
DataBlock_Manager *datablock_manager;
int load_superblock();
int save_superblock();
int save_free_list_head(u_int64_t new_free_list_head);
int save_inode_list_head(u_int64_t new_inode_list_head);
void update_num_used_inodes(int delta);
void update_num_used_datablocks(int delta);
int sweep_inode_datablocks(INode_Data *inode_data,
u_int64_t start_block_index, bool allocate,
DatablockOperation *op);
int sweep_datablocks(u_int64_t *block_num, int indirect_num,
u_int64_t start_block_index, bool allocate,
DatablockOperation *op);
};
#endif