summaryrefslogtreecommitdiff
path: root/pkg/btrfs
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
parent437bf733021a6aa3b90042a12a35b887b8ed45a2 (diff)
update main
Diffstat (limited to 'pkg/btrfs')
-rw-r--r--pkg/btrfs/btrfsitem/item_inoderef.go32
-rw-r--r--pkg/btrfs/btrfsitem/items.txt2
-rw-r--r--pkg/btrfs/btrfsitem/items_gen.go22
3 files changed, 42 insertions, 14 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:"-"`
diff --git a/pkg/btrfs/btrfsitem/items.txt b/pkg/btrfs/btrfsitem/items.txt
index 02c1d24..f38af3f 100644
--- a/pkg/btrfs/btrfsitem/items.txt
+++ b/pkg/btrfs/btrfsitem/items.txt
@@ -4,7 +4,7 @@ DEV_EXTENT=204 DevExtent
UNTYPED=0, Empty
QGROUP_RELATION=246 Empty
INODE_ITEM=1 Inode
-INODE_REF=12 InodeRef
+INODE_REF=12 InodeRefList
ORPHAN_ITEM=48 Orphan
PERSISTENT_ITEM=249 DevStats
ROOT_ITEM=132 Root
diff --git a/pkg/btrfs/btrfsitem/items_gen.go b/pkg/btrfs/btrfsitem/items_gen.go
index 40a0b53..63a5ac1 100644
--- a/pkg/btrfs/btrfsitem/items_gen.go
+++ b/pkg/btrfs/btrfsitem/items_gen.go
@@ -28,7 +28,7 @@ var keytype2gotype = map[Type]reflect.Type{
UNTYPED_KEY: reflect.TypeOf(Empty{}),
QGROUP_RELATION_KEY: reflect.TypeOf(Empty{}),
INODE_ITEM_KEY: reflect.TypeOf(Inode{}),
- INODE_REF_KEY: reflect.TypeOf(InodeRef{}),
+ INODE_REF_KEY: reflect.TypeOf(InodeRefList{}),
ORPHAN_ITEM_KEY: reflect.TypeOf(Orphan{}),
PERSISTENT_ITEM_KEY: reflect.TypeOf(DevStats{}),
ROOT_ITEM_KEY: reflect.TypeOf(Root{}),
@@ -36,13 +36,13 @@ var keytype2gotype = map[Type]reflect.Type{
UUID_RECEIVED_SUBVOL_KEY: reflect.TypeOf(UUIDMap{}),
}
-func (Chunk) isItem() {}
-func (Dev) isItem() {}
-func (DevExtent) isItem() {}
-func (DevStats) isItem() {}
-func (Empty) isItem() {}
-func (Inode) isItem() {}
-func (InodeRef) isItem() {}
-func (Orphan) isItem() {}
-func (Root) isItem() {}
-func (UUIDMap) isItem() {}
+func (Chunk) isItem() {}
+func (Dev) isItem() {}
+func (DevExtent) isItem() {}
+func (DevStats) isItem() {}
+func (Empty) isItem() {}
+func (Inode) isItem() {}
+func (InodeRefList) isItem() {}
+func (Orphan) isItem() {}
+func (Root) isItem() {}
+func (UUIDMap) isItem() {}