in vhdcore/header/parentlocator/factory.go [28:69]
func (f *Factory) Create() (*ParentLocator, error) {
locator := &ParentLocator{}
var err error
errDone := func() (*ParentLocator, error) {
return nil, err
}
locator.PlatformCode, err = f.readPlatformCode()
if err != nil {
return errDone()
}
locator.PlatformDataSpace, err = f.readPlatformDataSpace()
if err != nil {
return errDone()
}
locator.PlatformDataLength, err = f.readPlatformDataLength()
if err != nil {
return errDone()
}
locator.Reserved, err = f.readReserved()
if err != nil {
return errDone()
}
locator.PlatformDataOffset, err = f.readPlatformDataOffset()
if err != nil {
return errDone()
}
fileLocator := make([]byte, locator.PlatformDataLength)
_, err = f.vhdReader.ReadBytes(locator.PlatformDataOffset, fileLocator)
if err != nil {
err = NewParseError("ParentLocator", fmt.Errorf("Unable to resolve file locator: %v", err))
return errDone()
}
locator.SetPlatformSpecificFileLocator(fileLocator)
return locator, nil
}