diff --git a/src/syscall/process.rs b/src/syscall/process.rs index fe87701db8184925aaf5471f43e4683af59000a4..2d265c05f77b39a149bb4bc58b409314263570c7 100644 --- a/src/syscall/process.rs +++ b/src/syscall/process.rs @@ -574,16 +574,21 @@ pub fn exec(path: &[u8], arg_ptrs: &[[usize; 2]]) -> Result<usize> { // Strip whitespace let line = &line[line.iter().position(|&b| b != b' ') .unwrap_or(0)..]; + let executable = line.split(|x| *x == b' ').next().unwrap_or(b""); + let mut parts = line.split(|x| *x == b' ') + .map(|x| x.iter().cloned().collect::<Vec<_>>()) + .collect::<Vec<_>>(); if ! args.is_empty() { args.remove(0); } - args.insert(0, path.to_vec()); - args.insert(0, line.to_vec()); + parts.push(path.to_vec()); + parts.extend(args.iter().cloned()); + args = parts; canonical = { let contexts = context::contexts(); let context_lock = contexts.current().ok_or(Error::new(ESRCH))?; let context = context_lock.read(); - context.canonicalize(line) + context.canonicalize(executable) }; } else { println!("invalid script {}", unsafe { str::from_utf8_unchecked(path) });