in imfg/imfg.go [85:135]
func areaDataEnd(area flash.FlashArea, man manifest.MfgManifest) (int, error) {
end := 0
// Updates `end` if the specified region extends beyond our current concept
// of "the end".
checkOne := func(offset int, size int) error {
a := man.FindWithinFlashAreaDevOff(man.Device, offset)
if a.Id != area.Id {
// Data belongs to a different area.
return nil
}
// Older manifests do not contain target size information.
if size <= 0 {
return errors.Errorf(
"failed to calculate end offset of data at %d: "+
"manifest lacks size",
offset)
}
subEnd := offset - a.Offset + size
if subEnd > end {
end = subEnd
}
return nil
}
for _, t := range man.Targets {
err := checkOne(t.Offset, t.Size)
if err != nil {
return 0, err
}
}
for _, r := range man.Raws {
err := checkOne(r.Offset, r.Size)
if err != nil {
return 0, err
}
}
if man.Meta != nil {
err := checkOne(man.Meta.EndOffset-1, 1)
if err != nil {
return 0, err
}
}
return end, nil
}