about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorJeremy Soller <jackpot51@gmail.com>2016-12-26 17:08:27 -0700
committerJeremy Soller <jackpot51@gmail.com>2016-12-27 10:55:41 -0700
commit88df0e391842f89dbd95fb8e375e11d8263ae156 (patch)
tree445e6abf8f088a1168acfc9da8a36e4ec1f37ea1 /src/libstd
parent86896ba0be624a9c09a07cc816bd972e032e4bc8 (diff)
downloadrust-88df0e391842f89dbd95fb8e375e11d8263ae156.tar.gz
rust-88df0e391842f89dbd95fb8e375e11d8263ae156.zip
Fix arguments on Redox
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/sys/redox/args.rs14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/libstd/sys/redox/args.rs b/src/libstd/sys/redox/args.rs
index f6fea2f1076..212895d7b76 100644
--- a/src/libstd/sys/redox/args.rs
+++ b/src/libstd/sys/redox/args.rs
@@ -52,10 +52,9 @@ impl DoubleEndedIterator for Args {
 mod imp {
     use os::unix::prelude::*;
     use mem;
-    use ffi::OsString;
+    use ffi::{CStr, OsString};
     use marker::PhantomData;
-    use slice;
-    use str;
+    use libc;
     use super::Args;
 
     use sys_common::mutex::Mutex;
@@ -64,12 +63,9 @@ mod imp {
     static LOCK: Mutex = Mutex::new();
 
     pub unsafe fn init(argc: isize, argv: *const *const u8) {
-        let mut args: Vec<Vec<u8>> = Vec::new();
-        for i in 0..argc {
-            let len = *(argv.offset(i * 2)) as usize;
-            let ptr = *(argv.offset(i * 2 + 1));
-            args.push(slice::from_raw_parts(ptr, len).to_vec());
-        }
+        let args = (0..argc).map(|i| {
+            CStr::from_ptr(*argv.offset(i) as *const libc::c_char).to_bytes().to_vec()
+        }).collect();
 
         LOCK.lock();
         let ptr = get_global_ptr();