Skip to content

Commit 09bd4c0

Browse files
committed
🐺 mmap: work around unsafeptr warnings
Since upstream is unwilling to drop mmapper or desensitize unsafeptr, I decided to take matters into my own hands by switching to even more "unsafe" conversions to get rid of the useless warning. Kind of ironic, isn't it? golang/go#58625
1 parent 8b35297 commit 09bd4c0

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

mmap/mmap_unix_generic.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,10 @@ func readFile(f *os.File, size int64) (uintptr, error) {
1818
}
1919

2020
func unmap(addr uintptr, length int) error {
21-
return unix.Munmap(unsafe.Slice((*byte)(unsafe.Pointer(addr)), length))
21+
b := sliceHeader{
22+
data: addr,
23+
len: length,
24+
cap: length,
25+
}
26+
return unix.Munmap(*(*[]byte)(unsafe.Pointer(&b)))
2227
}

mmap/mmap_unixwindows.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ import (
77
"unsafe"
88
)
99

10+
type sliceHeader struct {
11+
data uintptr
12+
len int
13+
cap int
14+
}
15+
1016
// ReadFile maps the named file into memory for reading.
1117
func ReadFile[T ~[]byte | ~string](name string) (data T, err error) {
1218
f, err := os.Open(name)
@@ -30,7 +36,11 @@ func ReadFile[T ~[]byte | ~string](name string) (data T, err error) {
3036
return
3137
}
3238

33-
b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), size)
39+
b := sliceHeader{
40+
data: addr,
41+
len: int(size),
42+
cap: int(size),
43+
}
3444
return *(*T)(unsafe.Pointer(&b)), nil
3545
}
3646

0 commit comments

Comments
 (0)