github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/imagetool/showImageInode.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/Cloud-Foundations/Dominator/lib/filesystem" 8 "github.com/Cloud-Foundations/Dominator/lib/filter" 9 "github.com/Cloud-Foundations/Dominator/lib/log" 10 ) 11 12 func showImageInodeSubcommand(args []string, logger log.DebugLogger) error { 13 if err := showImageInode(args[0], args[1]); err != nil { 14 return fmt.Errorf("error showing image inode: %s", err) 15 } 16 return nil 17 } 18 19 func listInode(inode filesystem.GenericInode, inodePath string, 20 numLinks int) error { 21 filt, err := filter.New([]string{".*"}) 22 if err != nil { 23 return err 24 } 25 return inode.List(os.Stdout, inodePath, nil, numLinks, listSelector, filt) 26 } 27 28 func showImageInode(image, inodePath string) error { 29 fs, err := getTypedFileSystem(image) 30 if err != nil { 31 return err 32 } 33 filenameToInodeTable := fs.FilenameToInodeTable() 34 if inum, ok := filenameToInodeTable[inodePath]; !ok { 35 return fmt.Errorf("path: \"%s\" not present in image", inodePath) 36 } else if inode, ok := fs.InodeTable[inum]; !ok { 37 return fmt.Errorf("inode: %d not present in image", inum) 38 } else { 39 numLinksTable := fs.BuildNumLinksTable() 40 return listInode(inode, inodePath, numLinksTable[inum]) 41 } 42 }