func Split()

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
}