fix bugs for last commit (support indirect datablocks r/w)

This commit is contained in:
Ziao 2023-11-18 14:55:30 -08:00
parent a04c3d6334
commit dcf0601039
2 changed files with 6 additions and 6 deletions

View File

@ -7,7 +7,7 @@ class FilesOperation {
u_int64_t root_inode;
public:
FilesOperation(RawDisk&);
int read_datablock(INode& inode, u_int64_t index, char* buffer);
int read_datablock(const INode& inode, u_int64_t index, char* buffer);
int write_datablock(INode& inode, u_int64_t index, char* buffer);
INode* new_inode(u_int64_t inode_number, u_int64_t permissions);
void initialize_rootinode();

View File

@ -46,7 +46,7 @@ FilesOperation::FilesOperation(RawDisk& disk_): disk(disk_) {
inop.initialize(disk);
}
u_int64_t index_to_offset(disk& disk, u_int64_t index) {
u_int64_t index_to_offset(const INode& inode, RawDisk& disk, u_int64_t index) {
if (index < 48) {
return inode.blocks[index];
} else if (index < 48 + 512){
@ -66,19 +66,19 @@ u_int64_t index_to_offset(disk& disk, u_int64_t index) {
disk.rawdisk_read(offset,indirect_buffer, IO_BLOCK_SIZE);
offset = INode::read_byte_at(8*(((index-48-512-512*512)%(512*512))/512), indirect_buffer);
disk.rawdisk_read(offset,indirect_buffer, IO_BLOCK_SIZE);
return INode::read_byte_at(8*(((index-48-512-512*512)%512), indirect_buffer);
return INode::read_byte_at(8*((index-48-512-512*512)%512), indirect_buffer);
} else {
printf("index out of range, tried to access index %llu, max index %llu\n", index, 48+512+512*512+512*512*512);
return -1;
}
}
int FilesOperation::read_datablock(INode& inode, u_int64_t index, char* buffer) {
int FilesOperation::read_datablock(const INode& inode, u_int64_t index, char* buffer) {
if (index >= inode.size) {
printf("Read datablock out of range, inode number %llu", inode.block_number);
return -1;
}
u_int64_t read_offset = index_to_offset(disk, index);
u_int64_t read_offset = index_to_offset(inode, disk, index);
if (read_offset == (u_int64_t)(-1)) {
return -1;
}
@ -90,7 +90,7 @@ int FilesOperation::write_datablock(INode& inode, u_int64_t index, char* buffer)
u_int64_t ret = inode.datablock_allocate(disk);
inode.size += 1;
}
u_int64_t write_offset = index_to_offset(disk, index);
u_int64_t write_offset = index_to_offset(inode, disk, index);
if (write_offset == (u_int64_t)(-1)) {
return -1;
}