github.com/Cloud-Foundations/Dominator@v0.3.4/lib/filesystem/iterators.go (about)

     1  package filesystem
     2  
     3  import (
     4  	"path"
     5  )
     6  
     7  func (directory *DirectoryInode) forEachEntry(directoryName string,
     8  	fn func(name string, inodeNumber uint64, inode GenericInode) error) error {
     9  	for _, dirent := range directory.EntryList {
    10  		name := path.Join(directoryName, dirent.Name)
    11  		if err := fn(name, dirent.InodeNumber, dirent.inode); err != nil {
    12  			return err
    13  		}
    14  		if inode, ok := dirent.inode.(*DirectoryInode); ok {
    15  			if err := inode.forEachEntry(name, fn); err != nil {
    16  				return err
    17  			}
    18  		}
    19  	}
    20  	return nil
    21  }
    22  
    23  func (fs *FileSystem) forEachFile(
    24  	fn func(name string, inodeNumber uint64, inode GenericInode) error) error {
    25  	if err := fn("/", 0, &fs.DirectoryInode); err != nil {
    26  		return err
    27  	}
    28  	return fs.DirectoryInode.forEachEntry("/", fn)
    29  }