summaryrefslogtreecommitdiff
path: root/pkg/btrfs/btrfsitem/item_inoderef.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-06-01 10:09:47 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-06-01 10:09:47 -0600
commit8dde45b09728fb753b072c73ff624dde832c073b (patch)
tree779eac71af7fb88f323f877c0395d99c711058c3 /pkg/btrfs/btrfsitem/item_inoderef.go
parent437bf733021a6aa3b90042a12a35b887b8ed45a2 (diff)
update main
Diffstat (limited to 'pkg/btrfs/btrfsitem/item_inoderef.go')
-rw-r--r--pkg/btrfs/btrfsitem/item_inoderef.go32
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:"-"`