mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
syscall, internal/syscall/windows: remove utf16PtrToString parameter
CL 208617 introduced syscall.utf16PtrToString and internal/syscall/windows.UTF16PtrToString functions. Original version of CL 208617 did not include syscall.utf16PtrToString and internal/syscall/windows.UTF16PtrToString max parameter. The parameter was added by Brad at the request of Ian. Ian said: "In some cases it seems at least possible that the null terminator is not present. I think it would be safer if we passed a maximum length here." The syscall.utf16PtrToString and internal/syscall/windows.UTF16PtrToString function are designed to work with only null terminated strings. So max parameter is superfluous. This change removes max parameter. Updates #34972 Change-Id: Ifea65dbd86bca8a08353579c6b9636c6f963d165 Reviewed-on: https://go-review.googlesource.com/c/go/+/228858 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
parent
e90b0ce68b
commit
53f27474a4
8 changed files with 30 additions and 20 deletions
|
|
@ -10,6 +10,7 @@ import (
|
|||
errorspkg "errors"
|
||||
"internal/oserror"
|
||||
"internal/race"
|
||||
"internal/unsafeheader"
|
||||
"runtime"
|
||||
"sync"
|
||||
"unicode/utf16"
|
||||
|
|
@ -59,20 +60,24 @@ func UTF16ToString(s []uint16) string {
|
|||
|
||||
// utf16PtrToString is like UTF16ToString, but takes *uint16
|
||||
// as a parameter instead of []uint16.
|
||||
// max is how many times p can be advanced looking for the null terminator.
|
||||
// If max is hit, the string is truncated at that point.
|
||||
func utf16PtrToString(p *uint16, max int) string {
|
||||
func utf16PtrToString(p *uint16) string {
|
||||
if p == nil {
|
||||
return ""
|
||||
}
|
||||
// Find NUL terminator.
|
||||
end := unsafe.Pointer(p)
|
||||
n := 0
|
||||
for *(*uint16)(end) != 0 && n < max {
|
||||
for *(*uint16)(end) != 0 {
|
||||
end = unsafe.Pointer(uintptr(end) + unsafe.Sizeof(*p))
|
||||
n++
|
||||
}
|
||||
s := (*[(1 << 30) - 1]uint16)(unsafe.Pointer(p))[:n:n]
|
||||
// Turn *uint16 into []uint16.
|
||||
var s []uint16
|
||||
hdr := (*unsafeheader.Slice)(unsafe.Pointer(&s))
|
||||
hdr.Data = unsafe.Pointer(p)
|
||||
hdr.Cap = n
|
||||
hdr.Len = n
|
||||
// Decode []uint16 into string.
|
||||
return string(utf16.Decode(s))
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue