From 6b3974fe1c4616d8b9872d88d737623cc48c4368 Mon Sep 17 00:00:00 2001
From: Luke Shumaker <lukeshu@lukeshu.com>
Date: Sat, 2 Jul 2022 22:10:55 -0600
Subject: subvolumes

---
 pkg/btrfs/btrfsitem/item_rootref.go | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 pkg/btrfs/btrfsitem/item_rootref.go

(limited to 'pkg/btrfs/btrfsitem/item_rootref.go')

diff --git a/pkg/btrfs/btrfsitem/item_rootref.go b/pkg/btrfs/btrfsitem/item_rootref.go
new file mode 100644
index 0000000..567e9c7
--- /dev/null
+++ b/pkg/btrfs/btrfsitem/item_rootref.go
@@ -0,0 +1,34 @@
+package btrfsitem
+
+import (
+	"lukeshu.com/btrfs-tools/pkg/binstruct"
+	"lukeshu.com/btrfs-tools/pkg/btrfs/internal"
+)
+
+type RootRef struct { // ROOT_REF=156 ROOT_BACKREF=144
+	DirID         internal.ObjID `bin:"off=0x00, siz=0x8"`
+	Sequence      int64          `bin:"off=0x08, siz=0x8"`
+	NameLen       uint16         `bin:"off=0x10, siz=0x2"` // [ignored-when-writing]
+	binstruct.End `bin:"off=0x12"`
+	Name          []byte `bin:"-"`
+}
+
+func (o *RootRef) UnmarshalBinary(dat []byte) (int, error) {
+	n, err := binstruct.UnmarshalWithoutInterface(dat, o)
+	if err != nil {
+		return n, err
+	}
+	o.Name = dat[n : n+int(o.NameLen)]
+	n += int(o.NameLen)
+	return n, nil
+}
+
+func (o RootRef) 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
+}
-- 
cgit v1.2.3-2-g168b