diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-06-01 10:09:47 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-06-01 10:09:47 -0600 |
commit | 8dde45b09728fb753b072c73ff624dde832c073b (patch) | |
tree | 779eac71af7fb88f323f877c0395d99c711058c3 /pkg/btrfs | |
parent | 437bf733021a6aa3b90042a12a35b887b8ed45a2 (diff) |
update main
Diffstat (limited to 'pkg/btrfs')
-rw-r--r-- | pkg/btrfs/btrfsitem/item_inoderef.go | 32 | ||||
-rw-r--r-- | pkg/btrfs/btrfsitem/items.txt | 2 | ||||
-rw-r--r-- | pkg/btrfs/btrfsitem/items_gen.go | 22 |
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() {} |