forked from Shiloh/githaven
23 lines
466 B
Go
23 lines
466 B
Go
|
package websspi
|
||
|
|
||
|
import (
|
||
|
"unicode/utf16"
|
||
|
"unsafe"
|
||
|
)
|
||
|
|
||
|
// UTF16PtrToString converts a pointer to a UTF16 string to a string
|
||
|
func UTF16PtrToString(ptr *uint16, maxLen int) (s string) {
|
||
|
if ptr == nil {
|
||
|
return ""
|
||
|
}
|
||
|
buf := make([]uint16, 0, maxLen)
|
||
|
for i, p := 0, uintptr(unsafe.Pointer(ptr)); i < maxLen; i, p = i+1, p+2 {
|
||
|
char := *(*uint16)(unsafe.Pointer(p))
|
||
|
if char == 0 {
|
||
|
return string(utf16.Decode(buf))
|
||
|
}
|
||
|
buf = append(buf, char)
|
||
|
}
|
||
|
return ""
|
||
|
}
|