Example #1
0
// Fetch the file for a given inode block-by-block, printing the data
func PrintFile(fs *minixfs.FileSystem, inode *minixfs.Inode) {
	blocksize := fs.Block_size
	filesize := uint(inode.Size)
	position := uint(0)

	for position < filesize {
		blocknum := fs.ReadMap(inode, position)
		block, err := fs.GetFullDataBlock(blocknum)
		if err != nil {
			fmt.Printf("Failed to get data block: %d - %s\n", blocknum, err)
			break
		}
		if filesize-position >= blocksize {
			fmt.Printf("%s", block.Data)
		} else {
			fmt.Printf("%s", block.Data[:filesize-position])
		}
		position = position + blocksize
	}
	fmt.Printf("\n")
}