in imfg/imfg.go [137:174]
func Split(mfgBin []byte, man manifest.MfgManifest,
areas []flash.FlashArea) (NameBlobMap, error) {
mm := NameBlobMap{}
for _, area := range areas {
if _, ok := mm[area.Name]; ok {
return nil, errors.Errorf(
"two or more flash areas with same name: \"%s\"", area.Name)
}
if area.Device == man.Device {
var areaBin []byte
if area.Offset < len(mfgBin) {
end := area.Offset + area.Size
overflow := end - len(mfgBin)
if overflow > 0 {
end -= overflow
}
areaBin = mfgBin[area.Offset:end]
}
dataEnd, err := areaDataEnd(area, man)
if err != nil {
// Failed to determine the data end offset. Just strip all
// trailing erase-val bytes.
areaBin = StripPadding(areaBin, man.EraseVal)
} else {
areaBin = areaBin[:dataEnd]
}
if len(areaBin) > 0 {
mm[area.Name] = areaBin
}
}
}
return mm, nil
}