From 677755c799c1b6b942349c7d9de836335c7bbf55 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Fri, 3 Feb 2023 11:32:52 -0700 Subject: btrfsitem: Have all Item implementations be pointers to structs --- lib/btrfs/btrfsitem/item_freespacebitmap.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'lib/btrfs/btrfsitem/item_freespacebitmap.go') diff --git a/lib/btrfs/btrfsitem/item_freespacebitmap.go b/lib/btrfs/btrfsitem/item_freespacebitmap.go index ad46204..742d126 100644 --- a/lib/btrfs/btrfsitem/item_freespacebitmap.go +++ b/lib/btrfs/btrfsitem/item_freespacebitmap.go @@ -1,4 +1,4 @@ -// Copyright (C) 2022 Luke Shumaker +// Copyright (C) 2022-2023 Luke Shumaker // // SPDX-License-Identifier: GPL-2.0-or-later @@ -6,13 +6,15 @@ package btrfsitem // key.objectid = object ID of the FreeSpaceInfo (logical_addr) // key.offset = offset of the FreeSpaceInfo (size) -type FreeSpaceBitmap []byte // FREE_SPACE_BITMAP=200 +type FreeSpaceBitmap struct { // FREE_SPACE_BITMAP=200 + Bitmap []byte +} func (o *FreeSpaceBitmap) UnmarshalBinary(dat []byte) (int, error) { - *o = dat + o.Bitmap = dat return len(dat), nil } func (o FreeSpaceBitmap) MarshalBinary() ([]byte, error) { - return []byte(o), nil + return o.Bitmap, nil } -- cgit v1.2.3-2-g168b From 21e92e5dea4d8efc65403eeaee91b32856b86cb6 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Fri, 3 Feb 2023 13:04:17 -0700 Subject: btrfsitem: Add `Free` and `CloneItem` methods to Items --- lib/btrfs/btrfsitem/item_freespacebitmap.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'lib/btrfs/btrfsitem/item_freespacebitmap.go') diff --git a/lib/btrfs/btrfsitem/item_freespacebitmap.go b/lib/btrfs/btrfsitem/item_freespacebitmap.go index 742d126..ebc00e4 100644 --- a/lib/btrfs/btrfsitem/item_freespacebitmap.go +++ b/lib/btrfs/btrfsitem/item_freespacebitmap.go @@ -6,15 +6,26 @@ package btrfsitem // key.objectid = object ID of the FreeSpaceInfo (logical_addr) // key.offset = offset of the FreeSpaceInfo (size) -type FreeSpaceBitmap struct { // FREE_SPACE_BITMAP=200 +type FreeSpaceBitmap struct { // complex FREE_SPACE_BITMAP=200 Bitmap []byte } +func (o *FreeSpaceBitmap) Free() { + bytePool.Put(o.Bitmap) + *o = FreeSpaceBitmap{} + freeSpaceBitmapPool.Put(o) +} + +func (o FreeSpaceBitmap) Clone() FreeSpaceBitmap { + o.Bitmap = cloneBytes(o.Bitmap) + return o +} + func (o *FreeSpaceBitmap) UnmarshalBinary(dat []byte) (int, error) { - o.Bitmap = dat + o.Bitmap = cloneBytes(dat) return len(dat), nil } func (o FreeSpaceBitmap) MarshalBinary() ([]byte, error) { - return o.Bitmap, nil + return append([]byte(nil), o.Bitmap...), nil } -- cgit v1.2.3-2-g168b