summaryrefslogtreecommitdiff
path: root/pkg/btrfs/btrfsitem/item_inoderef.go
diff options
context:
space:
mode:
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:"-"`