From f60d9fc9690bb7e160dee086b38c2225f0c20225 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott <ian@iandouglasscott.com> Date: Wed, 16 Aug 2017 12:30:20 -0700 Subject: [PATCH] Support arguments in #! --- src/syscall/process.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/syscall/process.rs b/src/syscall/process.rs index fe87701d..2d265c05 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) }); -- GitLab