Skip to content
This repository was archived by the owner on Dec 24, 2024. It is now read-only.

Commit e33b935

Browse files
committed
internal/xcnv: use Go-1.17 unsafe.Slice
1 parent fdd927d commit e33b935

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

internal/xcnv/eda2lcio.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"fmt"
1212
"io"
1313
"log"
14-
"reflect"
1514
"unsafe"
1615

1716
"github.com/go-lpc/mim/internal/eformat"
@@ -105,10 +104,8 @@ func i32sFrom(w *bytes.Buffer, d *eformat.DIF) []int32 {
105104

106105
// FIXME(sbinet): use a special io.Writer that writes to
107106
// a []int32 instead of this unsafe business ?
108-
hdr := *(*reflect.SliceHeader)(unsafe.Pointer(&raw))
109-
hdr.Len /= 4
110-
hdr.Cap /= 4
107+
ptr := (*int32)(unsafe.Pointer(&raw[0]))
108+
sli := unsafe.Slice(ptr, len(raw)/i32sz)
111109

112-
data := *(*[]int32)(unsafe.Pointer(&hdr))
113-
return data
110+
return sli
114111
}

internal/xcnv/lcio2eda.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"fmt"
1010
"io"
1111
"log"
12-
"reflect"
1312
"unsafe"
1413

1514
"github.com/go-lpc/mim/internal/eformat"
@@ -53,10 +52,12 @@ func LCIO2EDA(w io.Writer, r *lcio.Reader, freq int, msg *log.Logger) error {
5352
}
5453

5554
func bytesFromI32s(raw []int32) []byte {
55+
n := len(raw)
56+
if n == 0 {
57+
return nil
58+
}
5659
const i32sz = 4
57-
hdr := *(*reflect.SliceHeader)(unsafe.Pointer(&raw))
58-
hdr.Len *= i32sz
59-
hdr.Cap *= i32sz
60-
61-
return *(*[]byte)(unsafe.Pointer(&hdr))
60+
ptr := (*byte)(unsafe.Pointer(&raw[0]))
61+
sli := unsafe.Slice(ptr, i32sz*n)
62+
return sli
6263
}

0 commit comments

Comments
 (0)