"syscall/js": {"L0"},
"internal/oserror": {"L0"},
"internal/syscall/unix": {"L0", "syscall"},
- "internal/syscall/windows": {"L0", "syscall", "internal/syscall/windows/sysdll", "unicode/utf16"},
+ "internal/syscall/windows": {"L0", "syscall", "internal/syscall/windows/sysdll", "internal/unsafeheader", "unicode/utf16"},
"internal/syscall/windows/registry": {"L0", "syscall", "internal/syscall/windows/sysdll", "unicode/utf16"},
"internal/syscall/execenv": {"L0", "syscall", "internal/syscall/windows", "unicode/utf16"},
"time": {
package windows
import (
+ "internal/unsafeheader"
"sync"
"syscall"
"unicode/utf16"
// 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))
}
if ifindex == 0 || ifindex == int(index) {
ifi := Interface{
Index: int(index),
- Name: windows.UTF16PtrToString(aa.FriendlyName, 10000),
+ Name: windows.UTF16PtrToString(aa.FriendlyName),
}
if aa.OperStatus == windows.IfOperStatusUp {
ifi.Flags |= FlagUp
defer syscall.DnsRecordListFree(r, 1)
resolved := resolveCNAME(syscall.StringToUTF16Ptr(name), r)
- cname := windows.UTF16PtrToString(resolved, 256)
+ cname := windows.UTF16PtrToString(resolved)
return absDomainName([]byte(cname)), nil
}
mxs := make([]*MX, 0, 10)
for _, p := range validRecs(r, syscall.DNS_TYPE_MX, name) {
v := (*syscall.DNSMXData)(unsafe.Pointer(&p.Data[0]))
- mxs = append(mxs, &MX{absDomainName([]byte(windows.UTF16PtrToString(v.NameExchange, 256))), v.Preference})
+ mxs = append(mxs, &MX{absDomainName([]byte(windows.UTF16PtrToString(v.NameExchange))), v.Preference})
}
byPref(mxs).sort()
return mxs, nil
d := (*syscall.DNSTXTData)(unsafe.Pointer(&p.Data[0]))
s := ""
for _, v := range (*[1 << 10]*uint16)(unsafe.Pointer(&(d.StringArray[0])))[:d.StringCount:d.StringCount] {
- s += windows.UTF16PtrToString(v, 1<<20)
+ s += windows.UTF16PtrToString(v)
}
txts = append(txts, s)
}
ptrs := make([]string, 0, 10)
for _, p := range validRecs(r, syscall.DNS_TYPE_PTR, arpa) {
v := (*syscall.DNSPTRData)(unsafe.Pointer(&p.Data[0]))
- ptrs = append(ptrs, absDomainName([]byte(windows.UTF16PtrToString(v.Host, 256))))
+ ptrs = append(ptrs, absDomainName([]byte(windows.UTF16PtrToString(v.Host))))
}
return ptrs, nil
}
}
func init() {
- cmd := windows.UTF16PtrToString(syscall.GetCommandLine(), 0xffff)
+ cmd := windows.UTF16PtrToString(syscall.GetCommandLine())
if len(cmd) == 0 {
arg0, _ := Executable()
Args = []string{arg0}
}
defer syscall.NetApiBufferFree(p)
i := (*syscall.UserInfo10)(unsafe.Pointer(p))
- return windows.UTF16PtrToString(i.FullName, 1024), nil
+ return windows.UTF16PtrToString(i.FullName), nil
}
func lookupFullName(domain, username, domainAndUser string) (string, error) {
if entry.Name == nil {
continue
}
- sid, err := lookupGroupName(windows.UTF16PtrToString(entry.Name, 1024))
+ sid, err := lookupGroupName(windows.UTF16PtrToString(entry.Name))
if err != nil {
return nil, err
}
return "", e
}
defer LocalFree((Handle)(unsafe.Pointer(s)))
- return utf16PtrToString(s, 256), nil
+ return utf16PtrToString(s), nil
}
// Len returns the length, in bytes, of a valid security identifier sid.
errorspkg "errors"
"internal/oserror"
"internal/race"
+ "internal/unsafeheader"
"runtime"
"sync"
"unicode/utf16"
// 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))
}