48 lines
1.4 KiB
C++
48 lines
1.4 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);
|
|
~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, size_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);
|
|
|
|
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 |