diff options
author | Jesse Luehrs <doy@tozt.net> | 2022-01-17 00:11:52 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2022-01-17 00:22:16 -0500 |
commit | 296fa4ce873c158b8c87d21db3e566c8ae365504 (patch) | |
tree | 853fdd6ff652c4be9d94830b9ee615a8ac4f8784 /src/runner | |
parent | e7d8a9f7d234cb2b8a6691c5a2e33f2b18776a3d (diff) | |
download | nbsh-296fa4ce873c158b8c87d21db3e566c8ae365504.tar.gz nbsh-296fa4ce873c158b8c87d21db3e566c8ae365504.zip |
stop sending environment stuff over a pipe
sending it through the actual environment should be sufficient
Diffstat (limited to 'src/runner')
-rw-r--r-- | src/runner/mod.rs | 28 |
1 files changed, 6 insertions, 22 deletions
diff --git a/src/runner/mod.rs b/src/runner/mod.rs index 21ed9c9..48d66ad 100644 --- a/src/runner/mod.rs +++ b/src/runner/mod.rs @@ -69,16 +69,14 @@ enum Frame { For(bool, usize, Vec<String>), } -pub async fn main() -> anyhow::Result<i32> { - // Safety: we don't create File instances for or read/write data on fds - // 3 or 4 anywhere else - let shell_read = unsafe { async_std::fs::File::from_raw_fd(3) }; - let shell_write = unsafe { async_std::fs::File::from_raw_fd(4) }; +pub async fn run(commands: &str) -> anyhow::Result<i32> { + // Safety: we don't create File instances for or read/write data on fd + // 3 anywhere else + let shell_write = unsafe { async_std::fs::File::from_raw_fd(3) }; cloexec(3)?; - cloexec(4)?; - let (commands, mut env) = read_data(shell_read).await?; - run_commands(&commands, &mut env, &shell_write).await?; + let mut env = Env::new_from_env()?; + run_commands(commands, &mut env, &shell_write).await?; let status = env.latest_status(); write_event(&shell_write, Event::Exit(env)).await?; @@ -221,20 +219,6 @@ async fn run_pipeline( Ok(()) } -async fn read_data( - mut fh: async_std::fs::File, -) -> anyhow::Result<(String, Env)> { - let mut data = vec![]; - fh.read_to_end(&mut data).await?; - let commands = bincode::deserialize(&data).unwrap(); - let len: usize = bincode::serialized_size(&commands) - .unwrap() - .try_into() - .unwrap(); - let env = Env::from_bytes(&data[len..]); - Ok((commands, env)) -} - async fn write_event( mut fh: &async_std::fs::File, event: Event, |