Merge branch 'update_redox_rt' into 'main'
bootstrap: Update redox-rt See merge request redox-os/base!51
This commit is contained in:
Generated
+2
-2
@@ -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",
|
||||
|
||||
+14
-24
@@ -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::<Vec<_>>()
|
||||
env_bytes
|
||||
.split(|&c| c == b'\n')
|
||||
.filter(|var| !var.is_empty())
|
||||
.filter(|var| !var.starts_with(b"INITFS_"))
|
||||
.collect::<Vec<_>>()
|
||||
};
|
||||
|
||||
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::<usize>()
|
||||
+ 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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user