func()

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
}