Rename mkfile to create_new_inode and update mode argument to detect S_IFDIR condition

This commit is contained in:
Victor 2023-11-18 01:46:44 -08:00
parent aacb3e0193
commit c45667461b
3 changed files with 9 additions and 11 deletions

View File

@ -11,7 +11,7 @@ class FilesOperation {
int write_datablock(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); 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 create_new_inode(u_int64_t parent_inode_number, const char* name, mode_t mode);
u_int64_t namei(const char* path); u_int64_t namei(const char* path);
u_int64_t fischl_mkdir(const char*, mode_t); u_int64_t fischl_mkdir(const char*, mode_t);
u_int64_t fischl_mknod(const char*, mode_t); u_int64_t fischl_mknod(const char*, mode_t);

View File

@ -65,7 +65,7 @@ class INode{
// other // other
u_int64_t uid; u_int64_t uid;
u_int64_t gid; u_int64_t gid;
u_int64_t permissions; u_int64_t permissions;//will respond to mode_t mode <File type> <owner permission> <group permission> <other permission>; this is octal format
u_int64_t size; // Number of datablocks u_int64_t size; // Number of datablocks
u_int64_t block_number; u_int64_t block_number;

View File

@ -89,11 +89,11 @@ 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);
INode *get_inode = new_inode(root_inode, 1); INode *get_inode = new_inode(root_inode, S_IFDIR);
delete get_inode; 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::create_new_inode(u_int64_t parent_inode_number, const char* name, mode_t mode) {
// trys to create a file under parent directory // trys to create a file under parent directory
if (strlen(name)>=56) { if (strlen(name)>=56) {
perror("Name too long, cannot create file or directory"); perror("Name too long, cannot create file or directory");
@ -101,7 +101,7 @@ u_int64_t FilesOperation::mkfile(u_int64_t parent_inode_number, const char* name
} }
INode inode; INode inode;
inode.inode_construct(parent_inode_number, disk); inode.inode_construct(parent_inode_number, disk);
if (inode.permissions != 1) { if ((inode.permissions & S_IFMT) != S_IFDIR) {
printf("Parent Inode is not a directory\n"); printf("Parent Inode is not a directory\n");
return -1; return -1;
} }
@ -130,7 +130,7 @@ 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
INode *get_inode = new_inode(new_inode_number, permissions); INode *get_inode = new_inode(new_inode_number, mode);
delete get_inode; delete get_inode;
return new_inode_number; return new_inode_number;
} }
@ -149,7 +149,7 @@ u_int64_t FilesOperation::namei(const char* path) {
while (std::getline(pathStream, new_name, '/')) { while (std::getline(pathStream, new_name, '/')) {
INode inode; INode inode;
inode.inode_construct(current_inode, disk); inode.inode_construct(current_inode, disk);
if (inode.permissions != 1 || inode.size == 0) { if ((inode.permissions & S_IFMT) != S_IFDIR || inode.size == 0) {
printf("namei: %s is not a non-empty directory\n", current_dirname.c_str()); printf("namei: %s is not a non-empty directory\n", current_dirname.c_str());
return -1; return -1;
} }
@ -195,11 +195,9 @@ u_int64_t FilesOperation::fischl_mkdir(const char* path, mode_t mode) {
return -1; return -1;
} }
//make new inode //make new inode
u_int64_t ret = mkfile(parent_inode_number, newDirname, 1);/* mode|S_IFDIR if need to call with dir*/ u_int64_t ret = create_new_inode(parent_inode_number, newDirname, mode|S_IFDIR);//specify S_IFDIR as directory
delete pathdup; delete pathdup;
return ret; return ret;
//create with struct inode *__fishcl_new_inode(, that is change mkfile to fishcl_new_inode
//after new_inode(mkfile), go to fischl_add_entry record //after new_inode(mkfile), go to fischl_add_entry record
@ -220,7 +218,7 @@ u_int64_t FilesOperation::fischl_mknod(const char* path, mode_t mode) {
return -1; return -1;
} }
//make new inode //make new inode
u_int64_t ret = mkfile(parent_inode_number, newFilename, 0); u_int64_t ret = create_new_inode(parent_inode_number, newFilename, mode);
delete pathdup; delete pathdup;
return ret; return ret;
} }