func parseMeta()

in mfg/parse.go [72:107]


func parseMeta(bin []byte) (Meta, error) {
	if len(bin) < META_FOOTER_SZ {
		return Meta{}, errors.Errorf(
			"binary too small to accommodate meta footer; "+
				"bin-size=%d ftr-size=%d", len(bin), META_FOOTER_SZ)
	}

	ftr, _, err := parseMetaFooter(bin[len(bin)-META_FOOTER_SZ:])
	if err != nil {
		return Meta{}, err
	}

	if int(ftr.Size) > len(bin) {
		return Meta{}, errors.Errorf(
			"binary too small to accommodate meta region; "+
				"bin-size=%d meta-size=%d", len(bin), ftr.Size)
	}

	ftrOff := len(bin) - META_FOOTER_SZ
	off := len(bin) - int(ftr.Size)

	tlvs := []MetaTlv{}
	for off < ftrOff {
		tlv, sz, err := parseMetaTlv(bin[off:])
		if err != nil {
			return Meta{}, err
		}
		tlvs = append(tlvs, tlv)
		off += sz
	}

	return Meta{
		Tlvs:   tlvs,
		Footer: ftr,
	}, nil
}