// Copyright (C) 2022 Luke Shumaker // // SPDX-License-Identifier: GPL-2.0-or-later package btrfsitem import ( "git.lukeshu.com/btrfs-progs-ng/lib/binstruct" ) // Metadata is like Extent, but doesn't have .Info. type Metadata struct { // METADATA_ITEM=169 Head ExtentHeader Refs []ExtentInlineRef } func (o *Metadata) UnmarshalBinary(dat []byte) (int, error) { n, err := binstruct.Unmarshal(dat, &o.Head) if err != nil { return n, err } o.Refs = nil for n < len(dat) { var ref ExtentInlineRef _n, err := binstruct.Unmarshal(dat[n:], &ref) n += _n o.Refs = append(o.Refs, ref) if err != nil { return n, err } } return n, nil } func (o Metadata) MarshalBinary() ([]byte, error) { dat, err := binstruct.Marshal(o.Head) if err != nil { return dat, err } for _, ref := range o.Refs { bs, err := binstruct.Marshal(ref) dat = append(dat, bs...) if err != nil { return dat, err } } return dat, nil }