summaryrefslogtreecommitdiff
path: root/pkg/btrfs/btrfsitem/item_chunk.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/btrfs/btrfsitem/item_chunk.go')
-rw-r--r--pkg/btrfs/btrfsitem/item_chunk.go16
1 files changed, 10 insertions, 6 deletions
diff --git a/pkg/btrfs/btrfsitem/item_chunk.go b/pkg/btrfs/btrfsitem/item_chunk.go
index 4389a46..8ffc83b 100644
--- a/pkg/btrfs/btrfsitem/item_chunk.go
+++ b/pkg/btrfs/btrfsitem/item_chunk.go
@@ -7,8 +7,13 @@ import (
"lukeshu.com/btrfs-tools/pkg/btrfs/internal"
)
+// Maps logical address to physical.
type Chunk struct { // CHUNK_ITEM=228
- // Maps logical address to physical.
+ Head ChunkHeader
+ Stripes []ChunkStripe
+}
+
+type ChunkHeader struct {
Size uint64 `bin:"off=0x0, siz=0x8"` // size of chunk (bytes)
Owner internal.ObjID `bin:"off=0x8, siz=0x8"` // root referencing this chunk (2)
StripeLen uint64 `bin:"off=0x10, siz=0x8"` // stripe length
@@ -19,7 +24,6 @@ type Chunk struct { // CHUNK_ITEM=228
NumStripes uint16 `bin:"off=0x2c, siz=0x2"` // number of stripes
SubStripes uint16 `bin:"off=0x2e, siz=0x2"` // sub stripes
binstruct.End `bin:"off=0x30"`
- Stripes []ChunkStripe `bin:"-"`
}
type ChunkStripe struct {
@@ -30,12 +34,12 @@ type ChunkStripe struct {
}
func (chunk *Chunk) UnmarshalBinary(dat []byte) (int, error) {
- n, err := binstruct.UnmarshalWithoutInterface(dat, chunk)
+ n, err := binstruct.Unmarshal(dat, &chunk.Head)
if err != nil {
return n, err
}
chunk.Stripes = nil
- for i := 0; i < int(chunk.NumStripes); i++ {
+ for i := 0; i < int(chunk.Head.NumStripes); i++ {
var stripe ChunkStripe
_n, err := binstruct.Unmarshal(dat[n:], &stripe)
n += _n
@@ -48,8 +52,8 @@ func (chunk *Chunk) UnmarshalBinary(dat []byte) (int, error) {
}
func (chunk Chunk) MarshalBinary() ([]byte, error) {
- chunk.NumStripes = uint16(len(chunk.Stripes))
- ret, err := binstruct.MarshalWithoutInterface(chunk)
+ chunk.Head.NumStripes = uint16(len(chunk.Stripes))
+ ret, err := binstruct.Marshal(chunk.Head)
if err != nil {
return ret, err
}