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);
INode* new_inode(u_int64_t inode_number, u_int64_t permissions);
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 fischl_mkdir(const char*, mode_t);
u_int64_t fischl_mknod(const char*, mode_t);

View File

@ -65,7 +65,7 @@ class INode{
// other
u_int64_t uid;
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 block_number;

View File

@ -89,11 +89,11 @@ void FilesOperation::initialize_rootinode() {
// this method must be called explicitly right after initializion
root_inode = inop.inode_allocate(disk);
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;
}
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
if (strlen(name)>=56) {
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_construct(parent_inode_number, disk);
if (inode.permissions != 1) {
if ((inode.permissions & S_IFMT) != S_IFDIR) {
printf("Parent Inode is not a directory\n");
return -1;
}
@ -130,7 +130,7 @@ u_int64_t FilesOperation::mkfile(u_int64_t parent_inode_number, const char* name
inode.inode_save(disk);
// initialize new file
INode *get_inode = new_inode(new_inode_number, permissions);
INode *get_inode = new_inode(new_inode_number, mode);
delete get_inode;
return new_inode_number;
}
@ -149,7 +149,7 @@ u_int64_t FilesOperation::namei(const char* path) {
while (std::getline(pathStream, new_name, '/')) {
INode inode;
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());
return -1;
}
@ -195,11 +195,9 @@ u_int64_t FilesOperation::fischl_mkdir(const char* path, mode_t mode) {
return -1;
}
//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;
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
@ -220,7 +218,7 @@ u_int64_t FilesOperation::fischl_mknod(const char* path, mode_t mode) {
return -1;
}
//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;
return ret;
}