in vhdcore/block/differencingDiskBlockFactory.go [69:100]
func (f *DifferencingDiskBlockFactory) Create(blockIndex uint32) (*Block, error) {
if !f.params.BlockAllocationTable.HasData(blockIndex) {
if f.cachedBlock == nil || f.cachedBlock.BlockIndex != blockIndex {
var err error
f.cachedBlock, err = f.params.ParentBlockFactory.Create(blockIndex)
if err != nil {
return nil, err
}
}
return f.cachedBlock, nil
}
if f.cachedBlock == nil || f.cachedBlock.BlockIndex != blockIndex {
logicalRange := common.NewIndexRangeFromLength(int64(blockIndex)*f.GetBlockSize(), f.GetBlockSize())
f.cachedBlock = &Block{
BlockIndex: blockIndex,
LogicalRange: logicalRange,
VhdUniqueID: f.params.VhdFooter.UniqueID,
IsEmpty: false,
BlockDataReader: f.blockDataReader,
}
var err error
f.cachedBlock.BitMap, err = f.bitmapFactory.Create(blockIndex)
if err != nil {
return nil, err
}
}
return f.cachedBlock, nil
}