about summary refs log tree commit diff
path: root/src/libcore/os.rs
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-01-10 21:58:30 -0800
committerPatrick Walton <pcwalton@mimiga.net>2013-01-10 21:58:30 -0800
commit83675895af7c6af80cc8a4f5cec4e565dc829fca (patch)
treeff40ac65d6ce8605b8636f53a4bf1b5cdd6f5b1f /src/libcore/os.rs
parentb71381dcc9c7393dec2f45267c538ff126893120 (diff)
downloadrust-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.rs38
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 {