mirror of https://go.googlesource.com/go
unique: use stringslite.Clone
Change-Id: Icb1ba7df1f0414090632e663b6a92b492546070d GitHub-Last-Rev: 5169d2681311d2631d9119aea17114602efcaa24 GitHub-Pull-Request: golang/go#67092 Reviewed-on: https://go-review.googlesource.com/c/go/+/581940 Reviewed-by: Keith Randall <khr@golang.org> Auto-Submit: Keith Randall <khr@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Ian Lance Taylor <iant@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Commit-Queue: Ian Lance Taylor <iant@google.com> Reviewed-by: Keith Randall <khr@google.com>changes/40/581940/5
parent
20130cc36a
commit
4dccb78582
|
@ -6,6 +6,7 @@ package unique
|
|||
|
||||
import (
|
||||
"internal/abi"
|
||||
"internal/stringslite"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
|
@ -20,7 +21,7 @@ import (
|
|||
func clone[T comparable](value T, seq *cloneSeq) T {
|
||||
for _, offset := range seq.stringOffsets {
|
||||
ps := (*string)(unsafe.Pointer(uintptr(unsafe.Pointer(&value)) + offset))
|
||||
*ps = cloneString(*ps)
|
||||
*ps = stringslite.Clone(*ps)
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
@ -86,15 +87,3 @@ func buildArrayCloneSeq(typ *abi.Type, seq *cloneSeq, baseOffset uintptr) {
|
|||
offset = (offset + align - 1) &^ (align - 1)
|
||||
}
|
||||
}
|
||||
|
||||
// cloneString is a copy of strings.Clone, because we can't depend on the strings
|
||||
// package here. Several packages that might make use of unique, like net, explicitly
|
||||
// forbid depending on unicode, which strings depends on.
|
||||
func cloneString(s string) string {
|
||||
if len(s) == 0 {
|
||||
return ""
|
||||
}
|
||||
b := make([]byte, len(s))
|
||||
copy(b, s)
|
||||
return unsafe.String(&b[0], len(b))
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue