diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-06-01 10:09:47 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-06-01 10:09:47 -0600 |
commit | 8dde45b09728fb753b072c73ff624dde832c073b (patch) | |
tree | 779eac71af7fb88f323f877c0395d99c711058c3 /pkg/btrfs/btrfsitem/item_inoderef.go | |
parent | 437bf733021a6aa3b90042a12a35b887b8ed45a2 (diff) |
update main
Diffstat (limited to 'pkg/btrfs/btrfsitem/item_inoderef.go')
-rw-r--r-- | pkg/btrfs/btrfsitem/item_inoderef.go | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/pkg/btrfs/btrfsitem/item_inoderef.go b/pkg/btrfs/btrfsitem/item_inoderef.go index 05426b2..e59c4b3 100644 --- a/pkg/btrfs/btrfsitem/item_inoderef.go +++ b/pkg/btrfs/btrfsitem/item_inoderef.go @@ -4,8 +4,36 @@ import ( "lukeshu.com/btrfs-tools/pkg/binstruct" ) -type InodeRef struct { // INODE_REF=12 - Index int64 `bin:"off=0x0, siz=0x8"` +type InodeRefList []InodeRef // INODE_REF=12 + +func (o *InodeRefList) UnmarshalBinary(dat []byte) (int, error) { + n := 0 + for n < len(dat) { + var ref InodeRef + _n, err := binstruct.Unmarshal(dat, &ref) + n += _n + if err != nil { + return n, err + } + *o = append(*o, ref) + } + return n, nil +} + +func (o InodeRefList) MarshalBinary() ([]byte, error) { + var ret []byte + for _, ref := range o { + bs, err := binstruct.Marshal(ref) + ret = append(ret, bs...) + if err != nil { + return ret, err + } + } + return ret, nil +} + +type InodeRef struct { + Index int64 `bin:"off=0x0, siz=0x8"` NameLen uint16 `bin:"off=0x8, siz=0x2"` binstruct.End `bin:"off=0xa"` Name []byte `bin:"-"` |