diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-10 13:18:30 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-10 13:35:20 -0600 |
commit | 27401b6ea459921a6152ab1744da1618358465f4 (patch) | |
tree | 2c4f9c096f1a593e65d7f824901e815ca48bfaf0 /pkg/btrfs/btrfsitem/items.go | |
parent | 42f6f78e0a32ba0eda707154f8e1ffb4579604ee (diff) |
Rename the module, mv pkg lib
Diffstat (limited to 'pkg/btrfs/btrfsitem/items.go')
-rw-r--r-- | pkg/btrfs/btrfsitem/items.go | 77 |
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) -} |