From 296fa4ce873c158b8c87d21db3e566c8ae365504 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 17 Jan 2022 00:11:52 -0500 Subject: stop sending environment stuff over a pipe sending it through the actual environment should be sufficient --- src/runner/mod.rs | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) (limited to 'src/runner') 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), } -pub async fn main() -> anyhow::Result { - // 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 { + // 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, -- cgit v1.2.3-54-g00ecf