summaryrefslogtreecommitdiffstats
path: root/src/runner/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/runner/mod.rs')
-rw-r--r--src/runner/mod.rs28
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,