def rmdir(directory): inum = file_name_layer.lookup(directory, path_name_layer._wd) i = inode_number.inode_number_to_inode(inum) if (i.inode_type == FileType.directory): blockLayer.release_block(i.blocks[0]) inode_number.release_inode(inum) inode_directory = inode_number.inode_number_to_inode(path_name_layer._wd) block_directory = blockLayer.block_number_to_block(inode_directory.blocks[0]) buf = [""] * block_directory.size buf = block_directory.read(0, buf, 0, block_directory.size) buf = "".join(buf) search = directory + "|" + str(inum) + "," buf = buf.replace(search, "") clear = "_" * 512 block_directory.write(0, clear, 0, len(clear)) block_directory.write(0, buf, 0, len(buf)) if(len(buf) == 0): # checks to see if the directory is now empty block_directory.size = 0 else: raise Exception("Inode %r is not of type directory." % inum)
def rm(filename): num = 0 inum = file_name_layer.lookup(filename, path_name_layer._wd) i = inode_number.inode_number_to_inode(inum) for b in i.blocks: if (b != -1): blockLayer.release_block(i.blocks[num]) num += 1 inode_number.release_inode(inum) inode_directory = inode_number.inode_number_to_inode(path_name_layer._wd) block_directory = blockLayer.block_number_to_block(inode_directory.blocks[0]) buf = [""] * block_directory.size buf = block_directory.read(0, buf, 0, block_directory.size) buf = "".join(buf) search = filename + "|" + str(inum) + "," buf = buf.replace(search, "") clear = "_" * 512 block_directory.write(0, clear, 0, len(clear)) block_directory.write(0, buf, 0, len(buf)) if(len(buf) == 0): # checks to see if the directory is now empty block_directory.size = 0
def rm(name,rmdir=False): #get the directory which contains the file by parsing the path #find the last slash in the path slashPos = [] for i in range(len(name)): if name[i] == '/': slashPos.append(i) #if no slashes are found, use wd if len(slashPos) == 0: dir = FileNameLayer.wd matchName = name elif slashPos[-1]==0: #if the last slash is the first char, use root dir dir = FileNameLayer.rootDirectory matchName = name[1:] else: #get the inode number for the path up to the last slash, which is the directory that contains the file dir = general_path_to_inode_number(name[:slashPos[-1]],createOnFailure=0) matchName = name[(slashPos[-1]+1):] #free the file's inode fd = OPEN(name) InodeNumberLayer.release_inode(fd.inodeNum) #remove the reference from wd contents = FileNameLayer.read(dir) list = ''.join(contents).split(',') i = 0 while i < len(list): pair = list[i].split('|') #if the file is in the dir, remove it if pair[0] == matchName: list.pop(i) FileNameLayer.write(dir,','.join(list)) return success else: i += 1 if rmdir: raise Exception("Directory not found") else: raise Exception("File not found")