summaryrefslogtreecommitdiff
path: root/pkg/btrfs/btrfsitem/items.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/btrfs/btrfsitem/items.go')
-rw-r--r--pkg/btrfs/btrfsitem/items.go77
1 files changed, 0 insertions, 77 deletions
diff --git a/pkg/btrfs/btrfsitem/items.go b/pkg/btrfs/btrfsitem/items.go
deleted file mode 100644
index 5ad3471..0000000
--- a/pkg/btrfs/btrfsitem/items.go
+++ /dev/null
@@ -1,77 +0,0 @@
-package btrfsitem
-
-import (
- "fmt"
- "reflect"
-
- "lukeshu.com/btrfs-tools/pkg/binstruct"
- "lukeshu.com/btrfs-tools/pkg/btrfs/btrfssum"
- "lukeshu.com/btrfs-tools/pkg/btrfs/internal"
-)
-
-type Type = internal.ItemType
-
-type Item interface {
- isItem()
-}
-
-type Error struct {
- Dat []byte
- Err error
-}
-
-func (Error) isItem() {}
-
-func (o Error) MarshalBinary() ([]byte, error) {
- return o.Dat, nil
-}
-
-func (o *Error) UnmarshalBinary(dat []byte) (int, error) {
- o.Dat = dat
- return len(dat), nil
-}
-
-// Rather than returning a separate error value, return an Error item.
-func UnmarshalItem(key internal.Key, csumType btrfssum.CSumType, dat []byte) Item {
- var gotyp reflect.Type
- if key.ItemType == UNTYPED_KEY {
- var ok bool
- gotyp, ok = untypedObjID2gotype[key.ObjectID]
- if !ok {
- return Error{
- Dat: dat,
- Err: fmt.Errorf("btrfsitem.UnmarshalItem({ItemType:%v, ObjectID:%v}, dat): unknown object ID for untyped item",
- key.ItemType, key.ObjectID),
- }
- }
- } else {
- var ok bool
- gotyp, ok = keytype2gotype[key.ItemType]
- if !ok {
- return Error{
- Dat: dat,
- Err: fmt.Errorf("btrfsitem.UnmarshalItem({ItemType:%v}, dat): unknown item type", key.ItemType),
- }
- }
- }
- retPtr := reflect.New(gotyp)
- if csums, ok := retPtr.Interface().(*ExtentCSum); ok {
- csums.ChecksumSize = csumType.Size()
- }
- n, err := binstruct.Unmarshal(dat, retPtr.Interface())
- if err != nil {
- return Error{
- Dat: dat,
- Err: fmt.Errorf("btrfsitem.UnmarshalItem({ItemType:%v}, dat): %w", key.ItemType, err),
- }
-
- }
- if n < len(dat) {
- return Error{
- Dat: dat,
- Err: fmt.Errorf("btrfsitem.UnmarshalItem({ItemType:%v}, dat): left over data: got %v bytes but only consumed %v",
- key.ItemType, len(dat), n),
- }
- }
- return retPtr.Elem().Interface().(Item)
-}