change name init_inode to new_inode, return struct inode pointer

This commit is contained in:
Victor 2023-11-18 01:10:48 -08:00
parent ee66c10796
commit aacb3e0193
2 changed files with 13 additions and 10 deletions

View File

@ -9,7 +9,7 @@ class FilesOperation {
FilesOperation(RawDisk&); FilesOperation(RawDisk&);
int read_datablock(INode& inode, u_int64_t index, char* buffer); int read_datablock(INode& inode, u_int64_t index, char* buffer);
int write_datablock(INode& inode, u_int64_t index, char* buffer); int write_datablock(INode& inode, u_int64_t index, char* buffer);
void init_inode(u_int64_t inode_number, u_int64_t permissions); INode* new_inode(u_int64_t inode_number, u_int64_t permissions);
void initialize_rootinode(); void initialize_rootinode();
u_int64_t mkfile(u_int64_t parent_inode_number, const char* name, u_int64_t permissions); u_int64_t mkfile(u_int64_t parent_inode_number, const char* name, u_int64_t permissions);
u_int64_t namei(const char* path); u_int64_t namei(const char* path);

View File

@ -72,22 +72,25 @@ int FilesOperation::write_datablock(INode& inode, u_int64_t index, char* buffer)
} }
} }
void FilesOperation::init_inode(u_int64_t inode_number, u_int64_t permissions) { INode* FilesOperation::new_inode(u_int64_t inode_number, u_int64_t permissions) {
// zero out disk space of inode, because in memory inode is uninitialized by default // zero out disk space of inode, because in memory inode is uninitialized by default
char buffer[SECTOR_SIZE] = {0}; char buffer[SECTOR_SIZE] = {0};
disk.rawdisk_write(inode_number*SECTOR_SIZE, buffer, sizeof(buffer)); disk.rawdisk_write(inode_number*SECTOR_SIZE, buffer, sizeof(buffer));
INode inode; INode *inode = new INode;
inode.inode_construct(inode_number, disk); inode->inode_construct(inode_number, disk);
inode.block_number = inode_number; inode->block_number = inode_number;
inode.permissions = permissions; inode->permissions = permissions;
inode.inode_save(disk); inode->inode_save(disk);
return inode;
} }
void FilesOperation::initialize_rootinode() { void FilesOperation::initialize_rootinode() {
// this method must be called explicitly right after initializion // this method must be called explicitly right after initializion
root_inode = inop.inode_allocate(disk); root_inode = inop.inode_allocate(disk);
printf("Info: root inode number: %llu\n", root_inode); printf("Info: root inode number: %llu\n", root_inode);
init_inode(root_inode, 1); INode *get_inode = new_inode(root_inode, 1);
delete get_inode;
} }
u_int64_t FilesOperation::mkfile(u_int64_t parent_inode_number, const char* name, u_int64_t permissions) { u_int64_t FilesOperation::mkfile(u_int64_t parent_inode_number, const char* name, u_int64_t permissions) {
@ -127,8 +130,8 @@ u_int64_t FilesOperation::mkfile(u_int64_t parent_inode_number, const char* name
inode.inode_save(disk); inode.inode_save(disk);
// initialize new file // initialize new file
init_inode(new_inode_number, permissions); INode *get_inode = new_inode(new_inode_number, permissions);
delete get_inode;
return new_inode_number; return new_inode_number;
} }