summaryrefslogtreecommitdiff
path: root/pkg/btrfs/btrfsitem/item_extent.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/btrfs/btrfsitem/item_extent.go')
-rw-r--r--pkg/btrfs/btrfsitem/item_extent.go165
1 files changed, 0 insertions, 165 deletions
diff --git a/pkg/btrfs/btrfsitem/item_extent.go b/pkg/btrfs/btrfsitem/item_extent.go
deleted file mode 100644
index ab8a4c6..0000000
--- a/pkg/btrfs/btrfsitem/item_extent.go
+++ /dev/null
@@ -1,165 +0,0 @@
-package btrfsitem
-
-import (
- "fmt"
-
- "lukeshu.com/btrfs-tools/pkg/binstruct"
- "lukeshu.com/btrfs-tools/pkg/btrfs/internal"
- "lukeshu.com/btrfs-tools/pkg/util"
-)
-
-type Extent struct { // EXTENT_ITEM=168
- Head ExtentHeader
- Info TreeBlockInfo // only if .Head.Flags.Has(EXTENT_FLAG_TREE_BLOCK)
- Refs []ExtentInlineRef
-}
-
-func (o *Extent) UnmarshalBinary(dat []byte) (int, error) {
- n, err := binstruct.Unmarshal(dat, &o.Head)
- if err != nil {
- return n, err
- }
- if o.Head.Flags.Has(EXTENT_FLAG_TREE_BLOCK) {
- _n, err := binstruct.Unmarshal(dat[n:], &o.Info)
- n += _n
- if err != nil {
- return n, err
- }
- }
- o.Refs = nil
- for n < len(dat) {
- var ref ExtentInlineRef
- _n, err := binstruct.Unmarshal(dat[n:], &ref)
- n += _n
- o.Refs = append(o.Refs, ref)
- if err != nil {
- return n, err
- }
- }
- return n, nil
-}
-
-func (o Extent) MarshalBinary() ([]byte, error) {
- dat, err := binstruct.Marshal(o.Head)
- if err != nil {
- return dat, err
- }
- if o.Head.Flags.Has(EXTENT_FLAG_TREE_BLOCK) {
- bs, err := binstruct.Marshal(o.Info)
- dat = append(dat, bs...)
- if err != nil {
- return dat, err
- }
- }
- for _, ref := range o.Refs {
- bs, err := binstruct.Marshal(ref)
- dat = append(dat, bs...)
- if err != nil {
- return dat, err
- }
- }
- return dat, nil
-}
-
-type ExtentHeader struct {
- Refs int64 `bin:"off=0, siz=8"`
- Generation internal.Generation `bin:"off=8, siz=8"`
- Flags ExtentFlags `bin:"off=16, siz=8"`
- binstruct.End `bin:"off=24"`
-}
-
-type TreeBlockInfo struct {
- Key internal.Key `bin:"off=0, siz=0x11"`
- Level uint8 `bin:"off=0x11, siz=0x8"`
- binstruct.End `bin:"off=0x19"`
-}
-
-type ExtentFlags uint64
-
-const (
- EXTENT_FLAG_DATA = ExtentFlags(1 << iota)
- EXTENT_FLAG_TREE_BLOCK
-)
-
-var extentFlagNames = []string{
- "DATA",
- "TREE_BLOCK",
-}
-
-func (f ExtentFlags) Has(req ExtentFlags) bool { return f&req == req }
-func (f ExtentFlags) String() string { return util.BitfieldString(f, extentFlagNames, util.HexNone) }
-
-type ExtentInlineRef struct {
- Type Type // only 4 valid values: {TREE,SHARED}_BLOCK_REF_KEY, {EXTENT,SHARED}_DATA_REF_KEY
- Offset uint64 // only when Type != EXTENT_DATA_REF_KEY
- Body Item // only when Type == *_DATA_REF_KEY
-}
-
-func (o *ExtentInlineRef) UnmarshalBinary(dat []byte) (int, error) {
- o.Type = Type(dat[0])
- n := 1
- switch o.Type {
- case TREE_BLOCK_REF_KEY, SHARED_BLOCK_REF_KEY:
- _n, err := binstruct.Unmarshal(dat[n:], &o.Offset)
- n += _n
- if err != nil {
- return n, err
- }
- case EXTENT_DATA_REF_KEY:
- var dref ExtentDataRef
- _n, err := binstruct.Unmarshal(dat[n:], &dref)
- n += _n
- o.Body = dref
- if err != nil {
- return n, err
- }
- case SHARED_DATA_REF_KEY:
- _n, err := binstruct.Unmarshal(dat[n:], &o.Offset)
- n += _n
- if err != nil {
- return n, err
- }
- var sref SharedDataRef
- _n, err = binstruct.Unmarshal(dat[n:], &sref)
- n += _n
- o.Body = sref
- if err != nil {
- return n, err
- }
- default:
- return n, fmt.Errorf("btrfsitem.ExtentInlineRef.UnmarshalBinary: unexpected item type %v", o.Type)
- }
- return n, nil
-}
-
-func (o ExtentInlineRef) MarshalBinary() ([]byte, error) {
- dat := []byte{byte(o.Type)}
- switch o.Type {
- case TREE_BLOCK_REF_KEY, SHARED_BLOCK_REF_KEY:
- _dat, err := binstruct.Marshal(o.Offset)
- dat = append(dat, _dat...)
- if err != nil {
- return dat, err
- }
- case EXTENT_DATA_REF_KEY:
- _dat, err := binstruct.Marshal(o.Body)
- dat = append(dat, _dat...)
- if err != nil {
- return dat, err
- }
- case SHARED_DATA_REF_KEY:
- _dat, err := binstruct.Marshal(o.Offset)
- dat = append(dat, _dat...)
- if err != nil {
- return dat, err
- }
- _dat, err = binstruct.Marshal(o.Body)
- dat = append(dat, _dat...)
- if err != nil {
- return dat, err
- }
- default:
- return dat, fmt.Errorf("btrfsitem.ExtentInlineRef.MarshalBinary: unexpected item type %v", o.Type)
- }
- return dat, nil
-}