File tree 1 file changed +7
-4
lines changed
1 file changed +7
-4
lines changed Original file line number Diff line number Diff line change @@ -108,21 +108,24 @@ pub mod win32 {
108
108
let mut res = None ;
109
109
let mut done = false ;
110
110
while !done {
111
- let mut buf = vec:: from_elem ( n as uint , 0u16 ) ;
111
+ let mut k: DWORD = 0 ;
112
+ let buf = vec:: cast_to_mut ( vec:: from_elem ( n as uint , 0u16 ) ) ;
112
113
do vec:: as_mut_buf ( buf) |b, _sz| {
113
- let k : DWORD = f ( b, TMPBUF_SZ as DWORD ) ;
114
+ k = f ( b, TMPBUF_SZ as DWORD ) ;
114
115
if k == ( 0 as DWORD ) {
115
116
done = true ;
116
117
} else if ( k == n &&
117
118
libc:: GetLastError ( ) ==
118
119
libc:: ERROR_INSUFFICIENT_BUFFER as DWORD ) {
119
120
n *= ( 2 as DWORD ) ;
120
121
} else {
121
- let sub = vec:: slice ( buf, 0 u, k as uint ) ;
122
- res = option:: Some ( str:: from_utf16 ( sub) ) ;
123
122
done = true ;
124
123
}
125
124
}
125
+ if k != 0 && done {
126
+ let sub = vec:: slice ( buf, 0 u, k as uint ) ;
127
+ res = option:: Some ( str:: from_utf16 ( sub) ) ;
128
+ }
126
129
}
127
130
return res;
128
131
}
You can’t perform that action at this time.
0 commit comments