Esempio n. 1
0
func addSymlink(directory *filesystem.Directory, fileSystem, oldFS *FileSystem,
	name string, directoryPathName string, stat *syscall.Stat_t) error {
	inode, isNewInode := fileSystem.getSymlinkInode(stat)
	var symlink filesystem.Symlink
	symlink.Name = name
	symlink.InodeNumber = stat.Ino
	symlink.SetInode(inode)
	if isNewInode {
		err := scanSymlink(&symlink, fileSystem, directoryPathName)
		if err != nil {
			return err
		}
		if oldFS != nil && oldFS.SymlinkInodeTable != nil {
			if oldInode, found := oldFS.SymlinkInodeTable[stat.Ino]; found {
				if filesystem.CompareSymlinkInodes(inode, oldInode, nil) {
					inode = oldInode
					symlink.SetInode(inode)
					fileSystem.SymlinkInodeTable[stat.Ino] = inode
				}
			}
		}
	}
	directory.SymlinkList = append(directory.SymlinkList, &symlink)
	return nil
}