File tree Expand file tree Collapse file tree 1 file changed +15
-4
lines changed Expand file tree Collapse file tree 1 file changed +15
-4
lines changed Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ package windows
8
8
9
9
import (
10
10
errorspkg "errors"
11
+ "strings"
11
12
"sync"
12
13
"syscall"
13
14
"time"
@@ -125,14 +126,24 @@ func UTF16PtrToString(p *uint16) string {
125
126
return ""
126
127
}
127
128
128
- var encoded []uint16
129
- for * p != 0 {
130
- encoded = append (encoded , * p )
129
+ var sb strings.Builder
130
+
131
+ for r := rune (* p ); r != 0 ; r = rune (* p ) {
132
+ if ! utf16 .IsSurrogate (r ) {
133
+ sb .WriteRune (r )
134
+ } else {
135
+ p = (* uint16 )(unsafe .Pointer (uintptr (unsafe .Pointer (p )) + unsafe .Sizeof (* p )))
136
+ sb .WriteRune (utf16 .DecodeRune (r , rune (* p )))
137
+
138
+ if * p == 0 {
139
+ break
140
+ }
141
+ }
131
142
132
143
p = (* uint16 )(unsafe .Pointer (uintptr (unsafe .Pointer (p )) + unsafe .Sizeof (* p )))
133
144
}
134
145
135
- return string ( utf16 . Decode ( encoded ) )
146
+ return sb . String ( )
136
147
}
137
148
138
149
func Getpagesize () int { return 4096 }
You can’t perform that action at this time.
0 commit comments