diff --git a/bootstrap/Cargo.lock b/bootstrap/Cargo.lock index 3cef880b45..269eacbdcb 100644 --- a/bootstrap/Cargo.lock +++ b/bootstrap/Cargo.lock @@ -40,7 +40,7 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "generic-rt" version = "0.1.0" -source = "git+https://gitlab.redox-os.org/redox-os/relibc.git#099c35f3caa1d8c289d14423607c494c59ad8a51" +source = "git+https://gitlab.redox-os.org/redox-os/relibc.git#fe5273890a8f39f8ffa1507bfb243d76270e8a27" [[package]] name = "goblin" @@ -143,7 +143,7 @@ checksum = "436d45c2b6a5b159d43da708e62b25be3a4a3d5550d654b72216ade4c4bfd717" [[package]] name = "redox-rt" version = "0.1.0" -source = "git+https://gitlab.redox-os.org/redox-os/relibc.git#099c35f3caa1d8c289d14423607c494c59ad8a51" +source = "git+https://gitlab.redox-os.org/redox-os/relibc.git#fe5273890a8f39f8ffa1507bfb243d76270e8a27" dependencies = [ "bitflags", "generic-rt", diff --git a/bootstrap/src/exec.rs b/bootstrap/src/exec.rs index 7d32305718..f1c01ed647 100644 --- a/bootstrap/src/exec.rs +++ b/bootstrap/src/exec.rs @@ -2,7 +2,7 @@ use alloc::borrow::ToOwned; use alloc::vec::Vec; use syscall::flag::{O_CLOEXEC, O_RDONLY}; -use syscall::{EINTR, Error}; +use syscall::{Error, EINTR}; use redox_rt::proc::*; @@ -38,23 +38,24 @@ pub fn main() -> ! { log::set_max_level(log::LevelFilter::Warn); let _ = log::set_logger(&Logger); + let mut env_bytes = [0_u8; 4096]; let envs = { - let mut env = [0_u8; 4096]; - let fd = FdGuard::open("/scheme/sys/env", O_RDONLY).expect("bootstrap: failed to open env"); - let bytes_read = fd.read(&mut env).expect("bootstrap: failed to read env"); + let bytes_read = fd + .read(&mut env_bytes) + .expect("bootstrap: failed to read env"); - if bytes_read >= env.len() { + if bytes_read >= env_bytes.len() { // TODO: Handle this, we can allocate as much as we want in theory. panic!("env is too large"); } - let env = &mut env[..bytes_read]; + let env_bytes = &mut env_bytes[..bytes_read]; - let raw_iter = || env.split(|c| *c == b'\n').filter(|var| !var.is_empty()); - - let iter = || raw_iter().filter(|var| !var.starts_with(b"INITFS_")); - - iter().map(|var| var.to_owned()).collect::>() + env_bytes + .split(|&c| c == b'\n') + .filter(|var| !var.is_empty()) + .filter(|var| !var.starts_with(b"INITFS_")) + .collect::>() }; unsafe extern "C" { @@ -90,10 +91,8 @@ pub fn main() -> ! { // from this point, this_thr_fd is no longer valid const CWD: &[u8] = b"/scheme/initfs"; - const DEFAULT_SCHEME: &[u8] = b"file"; let extrainfo = ExtraInfo { cwd: Some(CWD), - default_scheme: Some(DEFAULT_SCHEME), sigprocmask: 0, sigignmask: 0, umask: redox_rt::sys::get_umask(), @@ -102,14 +101,6 @@ pub fn main() -> ! { }; let path = "/scheme/initfs/bin/init"; - let total_args_envs_auxvpointee_size = path.len() - + 1 - + envs.len() - + envs.iter().map(|v| v.len()).sum::() - + CWD.len() - + 1 - + DEFAULT_SCHEME.len() - + 1; let image_file = FdGuard::open(path, O_RDONLY) .expect("failed to open init") @@ -126,9 +117,8 @@ pub fn main() -> ! { init_proc_fd, &memory, path.as_bytes(), - [path], - envs.iter(), - total_args_envs_auxvpointee_size, + &[path.as_bytes()], + &envs, &extrainfo, None, )