Skip to content

Commit

Permalink
Auto merge of rust-lang#38626 - redox-os:args_fix, r=alexcrichton
Browse files Browse the repository at this point in the history
Fix argument handling on Redox

After switching the start code to be handled in libc, we are no longer passing in slices as arguments into the libstd main function. This means that handling had to be rewritten to match the unix way of doing things.

Additional commits on this branch are going to be merged in this PR: rust-lang#38577 (comment)
  • Loading branch information
bors committed Dec 28, 2016
2 parents 469fd77 + 88df0e3 commit 371f4d6
Showing 1 changed file with 5 additions and 9 deletions.
14 changes: 5 additions & 9 deletions src/libstd/sys/redox/args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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();
Expand Down

0 comments on commit 371f4d6

Please sign in to comment.