process_create(Exe, Args, Options) :-
must_be(chars, Exe),
- must_be(list(chars), Args),
must_be(list, Options),
check_option(Sin, find_stdio(Sin, stdin, Options), valid_stdio, [std], Stdin),
check_option(Sout, find_stdio(Sout, stdout, Options), valid_stdio, [std], Stdout),
valid_stdio([pipe, Stream]) :- must_be(var, Stream).
valid_stdio([file, Path]) :- must_be(chars, Path).
-find_env([env, E], Options) :- member(env(E), Options).
-find_env([environment, E], Options) :- member(environment(E), Options).
+find_env([env, ME], Options) :- member(env(E), Options), maplist(assign_to_list, E, ME).
+find_env([environment, ME], Options) :- member(environment(E), Options), maplist(assign_to_list, E, ME).
-valid_cwd(Cwd) :- must_be(chars, Cwd).
+assign_to_list(N=V, [N,v]).
+
+valid_cwd(Cwd).
valid_env([env, E]) :- valid_env_(E).
valid_env([environment, E]) :- valid_env_(E).
_ => panic!("Invalid value for clear_env"),
};
- let env_names = self.machine_st.try_from_list(env_args[0], stub_gen)?;
- let env_values = self.machine_st.try_from_list(env_args[1], stub_gen)?;
-
- let envs = env_names
+ let envs = self
+ .machine_st
+ .try_from_list(env_args[1], stub_gen)?
.into_iter()
- .zip(env_values)
- .map(|(name, value)| {
+ .map(|entry| {
+ let entry = self.machine_st.try_from_list(entry, stub_gen)?;
let name = self
.machine_st
- .value_to_str_like(name)
+ .value_to_str_like(entry[0])
.unwrap()
.as_str()
.to_string();
let value = self
.machine_st
- .value_to_str_like(value)
+ .value_to_str_like(entry[1])
.unwrap()
.as_str()
.to_string();
- (name, value)
+ Ok((name, value))
})
- .collect::<Vec<_>>();
+ .collect::<Result<Vec<_>, MachineStub>>()?;
let cwd = self.machine_st.value_to_str_like(cwd_r);