From 91a389cebfe094c2e6669a412d820e82bdabae29 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Fri, 12 Aug 2022 15:05:37 +0200 Subject: [PATCH] Adapt to cwd only being in relibc. --- Cargo.lock | 2 +- Cargo.toml | 3 ++- src/exec.rs | 11 +++++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8b581a3d90..fd097b64dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -96,7 +96,7 @@ dependencies = [ [[package]] name = "redox-exec" version = "0.1.0" -source = "git+https://gitlab.redox-os.org/redox-os/relibc.git#13e58007bcf11e9c0341d066168b90fb981f4cdf" +source = "git+https://gitlab.redox-os.org/4lDO2/relibc.git?branch=relibc_cwd#bc8a6d2cc4d2ed4cffdfc1e4797566605c5e54ea" dependencies = [ "goblin", "plain", diff --git a/Cargo.toml b/Cargo.toml index 6295880eaa..bae7802958 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,8 @@ crate-type = ["staticlib"] [dependencies] linked_list_allocator = "0.9" redox-initfs = { git = "https://gitlab.redox-os.org/redox-os/redox-initfs.git", features = ["kernel"], default-features = false } -redox-exec = { git = "https://gitlab.redox-os.org/redox-os/relibc.git" } +#redox-exec = { git = "https://gitlab.redox-os.org/redox-os/relibc.git" } +redox-exec = { git = "https://gitlab.redox-os.org/4lDO2/relibc.git", branch = "relibc_cwd" } redox_syscall = "0.3" [profile.release] diff --git a/src/exec.rs b/src/exec.rs index fee5702201..f310d43dc4 100644 --- a/src/exec.rs +++ b/src/exec.rs @@ -53,14 +53,19 @@ pub fn main() -> ! { spawn_initfs(initfs_offset, initfs_length); } + const CWD: &[u8] = b"initfs:"; + let extrainfo = redox_exec::ExtraInfo { + cwd: Some(CWD), + }; + let path = "initfs:bin/init"; - let total_args_envs_size = path.len() + 1 + envs.len() + envs.iter().map(|v| v.len()).sum::(); + let total_args_envs_auxvpointee_size = path.len() + 1 + envs.len() + envs.iter().map(|v| v.len()).sum::() + CWD.len() + 1; let image_file = FdGuard::new(syscall::open(path, O_RDONLY).expect("failed to open init")); let open_via_dup = FdGuard::new(syscall::open("thisproc:current/open_via_dup", 0).expect("failed to open open_via_dup")); let memory = FdGuard::new(syscall::open("memory:", 0).expect("failed to open memory")); - fexec_impl(image_file, open_via_dup, &memory, path.as_bytes(), [path], envs.iter(), total_args_envs_size, None).expect("failed to execute init"); + fexec_impl(image_file, open_via_dup, &memory, path.as_bytes(), [path], envs.iter(), total_args_envs_auxvpointee_size, &extrainfo, None).expect("failed to execute init"); unreachable!() } @@ -83,8 +88,6 @@ unsafe fn spawn_initfs(initfs_start: usize, initfs_length: usize) { let _ = syscall::close(write); let _ = syscall::read(read, &mut [0]); - let _ = syscall::chdir("initfs:"); - return; } }