diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2013-01-10 21:58:30 -0800 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2013-01-10 21:58:30 -0800 |
| commit | 83675895af7c6af80cc8a4f5cec4e565dc829fca (patch) | |
| tree | ff40ac65d6ce8605b8636f53a4bf1b5cdd6f5b1f /src/libcore/os.rs | |
| parent | b71381dcc9c7393dec2f45267c538ff126893120 (diff) | |
| download | rust-83675895af7c6af80cc8a4f5cec4e565dc829fca.tar.gz rust-83675895af7c6af80cc8a4f5cec4e565dc829fca.zip | |
libcore: Fix windows bustage. rs=bustage
Diffstat (limited to 'src/libcore/os.rs')
| -rw-r--r-- | src/libcore/os.rs | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/src/libcore/os.rs b/src/libcore/os.rs index f159bfe954f..ec31cb5c46b 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -106,27 +106,29 @@ pub mod win32 { pub fn fill_utf16_buf_and_decode(f: fn(*mut u16, DWORD) -> DWORD) -> Option<~str> { - let mut n = tmpbuf_sz as DWORD; - let mut res = None; - let mut done = false; - while !done { - let buf = vec::to_mut(vec::from_elem(n as uint, 0u16)); - do vec::as_mut_buf(buf) |b, _sz| { - let k : DWORD = f(b, tmpbuf_sz as DWORD); - if k == (0 as DWORD) { - done = true; - } else if (k == n && - libc::GetLastError() == - libc::ERROR_INSUFFICIENT_BUFFER as DWORD) { - n *= (2 as DWORD); - } else { - let sub = vec::slice(buf, 0u, k as uint); - res = option::Some(str::from_utf16(sub)); - done = true; + unsafe { + let mut n = tmpbuf_sz as DWORD; + let mut res = None; + let mut done = false; + while !done { + let buf = vec::to_mut(vec::from_elem(n as uint, 0u16)); + do vec::as_mut_buf(buf) |b, _sz| { + let k : DWORD = f(b, tmpbuf_sz as DWORD); + if k == (0 as DWORD) { + done = true; + } else if (k == n && + libc::GetLastError() == + libc::ERROR_INSUFFICIENT_BUFFER as DWORD) { + n *= (2 as DWORD); + } else { + let sub = vec::slice(buf, 0u, k as uint); + res = option::Some(str::from_utf16(sub)); + done = true; + } } } + return res; } - return res; } pub fn as_utf16_p<T>(s: &str, f: fn(*u16) -> T) -> T { |
