From 951bf2c8bd808531441aef59f0e14e4d13089ec1 Mon Sep 17 00:00:00 2001 From: Romain Doumenc Date: Sat, 30 Sep 2023 12:48:53 +0100 Subject: [PATCH] Use the modern unsafe replacement of reflect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As of Go1.20, “safer” versions of pointer casting are available to point to the same address. Use them. --- go.mod | 2 +- rpio.go | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 26f38ee..0941145 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ module github.com/stianeikeland/go-rpio/v4 -go 1.15 +go 1.21 diff --git a/rpio.go b/rpio.go index 557e993..ff7bd99 100644 --- a/rpio.go +++ b/rpio.go @@ -73,7 +73,6 @@ import ( "encoding/binary" "errors" "os" - "reflect" "sync" "syscall" "time" @@ -803,10 +802,7 @@ func memMap(fd uintptr, base int64) (mem []uint32, mem8 []byte, err error) { return } // Convert mapped byte memory to unsafe []uint32 pointer, adjust length as needed - header := *(*reflect.SliceHeader)(unsafe.Pointer(&mem8)) - header.Len /= (32 / 8) // (32 bit = 4 bytes) - header.Cap /= (32 / 8) - mem = *(*[]uint32)(unsafe.Pointer(&header)) + mem = unsafe.Slice((*uint32)(unsafe.Pointer(unsafe.SliceData(mem8))), len(mem8)/4) return }