fixed 2 bugs in unlink

This commit is contained in:
FactorialN 2023-12-01 00:34:29 -08:00
parent 489997e11e
commit 8ce7f295ce

View File

@ -98,7 +98,7 @@ INode_Data* FilesOperation::create_new_inode(u_int64_t parent_inode_number, cons
DirectoryEntry ent;
for(int i=0;i<=IO_BLOCK_SIZE-264;i+=264){
ent.deserialize(r_buffer+i);
if (strcmp(ent.file_name, name)==0) {
if (strcmp(ent.file_name, name)==0 && ent.inode_number != 0) {
if((mode & S_IFMT) == S_IFDIR){
fprintf(stderr,"[%s ,%d] %s/ already exists\n",__func__,__LINE__, name);
}else{
@ -362,10 +362,15 @@ void FilesOperation::unlink_inode(u_int64_t inode_number) {
}
}
// TODO: This is probably incorrect
// size is unsigned int
while(inode.metadata.size != 0) {
printf("dealloc, %d\n", inode.metadata.size);
u_int64_t dummy;
fs->deallocate_datablock(&inode, &dummy);
if (inode.metadata.size < IO_BLOCK_SIZE){
inode.metadata.size = 0;
break;
}
inode.metadata.size-=IO_BLOCK_SIZE;
}
fs->inode_manager->free_inode(&inode);
@ -403,6 +408,7 @@ int FilesOperation::fischl_unlink(const char* path) {
if (strcmp(ent.file_name, filename)==0) {
target_inode = ent.inode_number;
ent.inode_number = 0;
memset(ent.file_name, 0, sizeof(ent.file_name));
ent.serialize(rw_buffer+i);
break;
}