diff --git a/include/files.h b/include/files.h index 3f2b70d..713bc03 100644 --- a/include/files.h +++ b/include/files.h @@ -14,11 +14,11 @@ class FilesOperation { void initialize_rootinode(); void printDirectory(u_int64_t); u_int64_t create_new_inode(u_int64_t parent_inode_number, const char* name, mode_t mode); - // int unlink_inode(u_int64_t inode_number); + void unlink_inode(u_int64_t inode_number); 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); //int fischl_readdir(const char *, void *, fuse_fill_dir_t, off_t, struct fuse_file_info *, enum fuse_readdir_flags); - //int fischl_unlink (const char *); + int fischl_unlink (const char *); //int fischl_open (const char *, struct fuse_file_info *); }; \ No newline at end of file diff --git a/lib/files.cpp b/lib/files.cpp index 3ce2cb6..4a9e11f 100644 --- a/lib/files.cpp +++ b/lib/files.cpp @@ -294,4 +294,77 @@ u_int64_t FilesOperation::fischl_mknod(const char* path, mode_t mode) { u_int64_t ret = create_new_inode(parent_inode_number, newFilename, mode); delete pathdup; return ret; +} + +void FilesOperation::unlink_inode(u_int64_t inode_number) { + INode inode; + inode.inode_construct(inode_number, disk); + if ((inode.permissions & S_IFMT) == S_IFDIR) { + char buffer[IO_BLOCK_SIZE] = {0}; + for(u_int64_t idx=0; idx