func (decoderData *decoderData) addDirectory(header *tar.Header, parent *filesystem.Directory, name string) error { var newEntry filesystem.Directory newEntry.Name = name newEntry.Mode = filesystem.FileMode((header.Mode & ^syscall.S_IFMT) | syscall.S_IFDIR) newEntry.Uid = uint32(header.Uid) newEntry.Gid = uint32(header.Gid) parent.DirectoryList = append(parent.DirectoryList, &newEntry) decoderData.directoryTable[header.Name] = &newEntry return nil }
func addDirectory(directory *filesystem.Directory, fileSystem, oldFS *FileSystem, name string, directoryPathName string, stat *syscall.Stat_t) error { myPathName := path.Join(directoryPathName, name) if fileSystem.directoryInodeList[stat.Ino] { return errors.New("Hardlinked directory: " + myPathName) } fileSystem.directoryInodeList[stat.Ino] = true var dir filesystem.Directory dir.Name = name dir.Mode = filesystem.FileMode(stat.Mode) dir.Uid = stat.Uid dir.Gid = stat.Gid err := scanDirectory(&dir, fileSystem, oldFS, directoryPathName) if err != nil { return err } directory.DirectoryList = append(directory.DirectoryList, &dir) return nil }