Skip to content

Commit 9e3d732

Browse files
committed
Remove UnsafeSlice and use unsafe.Slice
References: - #713 - #566 Signed-off-by: Chun-Hung Tseng <[email protected]>
1 parent 2c29534 commit 9e3d732

3 files changed

Lines changed: 6 additions & 23 deletions

File tree

freelist.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,8 @@ func (f *freelist) read(p *page) {
282282
if count == 0 {
283283
f.ids = nil
284284
} else {
285-
var ids []pgid
286-
data := unsafeIndex(unsafe.Pointer(p), unsafe.Sizeof(*p), unsafe.Sizeof(ids[0]), idx)
287-
unsafeSlice(unsafe.Pointer(&ids), data, count)
285+
data := unsafeIndex(unsafe.Pointer(p), unsafe.Sizeof(*p), unsafe.Sizeof(pgid(0)), idx)
286+
ids := unsafe.Slice((*pgid)(data), count)
288287

289288
// copy the ids, so we don't modify on the freelist page directly
290289
idsCopy := make([]pgid, count)
@@ -322,15 +321,13 @@ func (f *freelist) write(p *page) error {
322321
p.count = uint16(l)
323322
} else if l < 0xFFFF {
324323
p.count = uint16(l)
325-
var ids []pgid
326324
data := unsafeAdd(unsafe.Pointer(p), unsafe.Sizeof(*p))
327-
unsafeSlice(unsafe.Pointer(&ids), data, l)
325+
ids := unsafe.Slice((*pgid)(data), l)
328326
f.copyall(ids)
329327
} else {
330328
p.count = 0xFFFF
331-
var ids []pgid
332329
data := unsafeAdd(unsafe.Pointer(p), unsafe.Sizeof(*p))
333-
unsafeSlice(unsafe.Pointer(&ids), data, l+1)
330+
ids := unsafe.Slice((*pgid)(data), l+1)
334331
ids[0] = pgid(l)
335332
f.copyall(ids[1:])
336333
}

page.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,8 @@ func (p *page) leafPageElements() []leafPageElement {
7474
if p.count == 0 {
7575
return nil
7676
}
77-
var elems []leafPageElement
7877
data := unsafeAdd(unsafe.Pointer(p), unsafe.Sizeof(*p))
79-
unsafeSlice(unsafe.Pointer(&elems), data, int(p.count))
78+
elems := unsafe.Slice((*leafPageElement)(data), int(p.count))
8079
return elems
8180
}
8281

@@ -91,9 +90,8 @@ func (p *page) branchPageElements() []branchPageElement {
9190
if p.count == 0 {
9291
return nil
9392
}
94-
var elems []branchPageElement
9593
data := unsafeAdd(unsafe.Pointer(p), unsafe.Sizeof(*p))
96-
unsafeSlice(unsafe.Pointer(&elems), data, int(p.count))
94+
elems := unsafe.Slice((*branchPageElement)(data), int(p.count))
9795
return elems
9896
}
9997

unsafe.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package bbolt
22

33
import (
4-
"reflect"
54
"unsafe"
65
)
76

@@ -26,14 +25,3 @@ func unsafeByteSlice(base unsafe.Pointer, offset uintptr, i, j int) []byte {
2625
// all), so this is believed to be correct.
2726
return (*[maxAllocSize]byte)(unsafeAdd(base, offset))[i:j:j]
2827
}
29-
30-
// unsafeSlice modifies the data, len, and cap of a slice variable pointed to by
31-
// the slice parameter. This helper should be used over other direct
32-
// manipulation of reflect.SliceHeader to prevent misuse, namely, converting
33-
// from reflect.SliceHeader to a Go slice type.
34-
func unsafeSlice(slice, data unsafe.Pointer, len int) {
35-
s := (*reflect.SliceHeader)(slice) //nolint:staticcheck
36-
s.Data = uintptr(data)
37-
s.Cap = len
38-
s.Len = len
39-
}

0 commit comments

Comments
 (0)