Skip to content

Commit 8367589

Browse files
committed
libcore: Fix windows bustage. rs=bustage
1 parent b71381d commit 8367589

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

src/libcore/os.rs

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -106,27 +106,29 @@ pub mod win32 {
106106

107107
pub fn fill_utf16_buf_and_decode(f: fn(*mut u16, DWORD) -> DWORD)
108108
-> Option<~str> {
109-
let mut n = tmpbuf_sz as DWORD;
110-
let mut res = None;
111-
let mut done = false;
112-
while !done {
113-
let buf = vec::to_mut(vec::from_elem(n as uint, 0u16));
114-
do vec::as_mut_buf(buf) |b, _sz| {
115-
let k : DWORD = f(b, tmpbuf_sz as DWORD);
116-
if k == (0 as DWORD) {
117-
done = true;
118-
} else if (k == n &&
119-
libc::GetLastError() ==
120-
libc::ERROR_INSUFFICIENT_BUFFER as DWORD) {
121-
n *= (2 as DWORD);
122-
} else {
123-
let sub = vec::slice(buf, 0u, k as uint);
124-
res = option::Some(str::from_utf16(sub));
125-
done = true;
109+
unsafe {
110+
let mut n = tmpbuf_sz as DWORD;
111+
let mut res = None;
112+
let mut done = false;
113+
while !done {
114+
let buf = vec::to_mut(vec::from_elem(n as uint, 0u16));
115+
do vec::as_mut_buf(buf) |b, _sz| {
116+
let k : DWORD = f(b, tmpbuf_sz as DWORD);
117+
if k == (0 as DWORD) {
118+
done = true;
119+
} else if (k == n &&
120+
libc::GetLastError() ==
121+
libc::ERROR_INSUFFICIENT_BUFFER as DWORD) {
122+
n *= (2 as DWORD);
123+
} else {
124+
let sub = vec::slice(buf, 0u, k as uint);
125+
res = option::Some(str::from_utf16(sub));
126+
done = true;
127+
}
126128
}
127129
}
130+
return res;
128131
}
129-
return res;
130132
}
131133

132134
pub fn as_utf16_p<T>(s: &str, f: fn(*u16) -> T) -> T {

0 commit comments

Comments
 (0)