From dcf06010394e9da47b710411d7bf401f430e6e4b Mon Sep 17 00:00:00 2001 From: Ziao <1575538687@qq.com> Date: Sat, 18 Nov 2023 14:55:30 -0800 Subject: [PATCH] fix bugs for last commit (support indirect datablocks r/w) --- include/files.h | 2 +- lib/files.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/files.h b/include/files.h index 9d205a4..98defa7 100644 --- a/include/files.h +++ b/include/files.h @@ -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(); diff --git a/lib/files.cpp b/lib/files.cpp index 1c84665..bec0a66 100644 --- a/lib/files.cpp +++ b/lib/files.cpp @@ -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; }