diff --git a/src/lune/builtins/process/mod.rs b/src/lune/builtins/process/mod.rs index 13c6a33..98309c3 100644 --- a/src/lune/builtins/process/mod.rs +++ b/src/lune/builtins/process/mod.rs @@ -200,10 +200,10 @@ async fn process_spawn( async fn spawn_command( program: String, args: Option>, - options: ProcessSpawnOptions, + mut options: ProcessSpawnOptions, ) -> LuaResult<(ExitStatus, Vec, Vec)> { let inherit_stdio = options.inherit_stdio; - let stdin = options.stdin; + let stdin = options.stdin.take(); let mut child = options .into_command(program, args) @@ -218,7 +218,7 @@ async fn spawn_command( // If the stdin option was provided, we write that to the child if let Some(stdin) = stdin { let mut child_stdin = child.stdin.take().unwrap(); - child_stdin.write_all(stdin).await.into_lua_err()?; + child_stdin.write_all(&stdin).await.into_lua_err()?; } if inherit_stdio { diff --git a/src/lune/builtins/process/options.rs b/src/lune/builtins/process/options.rs index 46a11e1..4c4fc73 100644 --- a/src/lune/builtins/process/options.rs +++ b/src/lune/builtins/process/options.rs @@ -14,7 +14,7 @@ pub struct ProcessSpawnOptions { pub(crate) envs: HashMap, pub(crate) shell: Option, pub(crate) inherit_stdio: bool, - pub(crate) stdin: Option<&'static [u8]>, + pub(crate) stdin: Option>, } impl<'lua> FromLua<'lua> for ProcessSpawnOptions { @@ -139,7 +139,7 @@ impl<'lua> FromLua<'lua> for ProcessSpawnOptions { */ match value.get("stdin")? { LuaValue::Nil => {} - LuaValue::String(s) => this.stdin = Some(&*(s.as_bytes().to_vec().leak())), + LuaValue::String(s) => this.stdin = Some(s.as_bytes().to_vec()), value => { return Err(LuaError::RuntimeError(format!( "Invalid type for option 'stdin' - expected 'string', got '{}'",