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.go23
1 files changed, 22 insertions, 1 deletions
diff --git a/pkg/btrfs/btrfsitem/item_inoderef.go b/pkg/btrfs/btrfsitem/item_inoderef.go
index 5a271ae..05426b2 100644
--- a/pkg/btrfs/btrfsitem/item_inoderef.go
+++ b/pkg/btrfs/btrfsitem/item_inoderef.go
@@ -6,7 +6,28 @@ import (
type InodeRef struct { // INODE_REF=12
Index int64 `bin:"off=0x0, siz=0x8"`
- NameLen int16 `bin:"off=0x8, siz=0x2"`
+ NameLen uint16 `bin:"off=0x8, siz=0x2"`
binstruct.End `bin:"off=0xa"`
Name []byte `bin:"-"`
}
+
+func (o *InodeRef) UnmarshalBinary(dat []byte) (int, error) {
+ n, err := binstruct.UnmarshalWithoutInterface(dat, o)
+ if err != nil {
+ return n, err
+ }
+ dat = dat[n:]
+ o.Name = dat[:o.NameLen]
+ n += int(o.NameLen)
+ return n, nil
+}
+
+func (o InodeRef) MarshalBinary() ([]byte, error) {
+ o.NameLen = uint16(len(o.Name))
+ dat, err := binstruct.MarshalWithoutInterface(o)
+ if err != nil {
+ return dat, err
+ }
+ dat = append(dat, o.Name...)
+ return dat, nil
+}