Skip to content

Commit

Permalink
std: Change ProcessOptions struct to have an option of a ~ vector
Browse files Browse the repository at this point in the history
This is a workaround for rust-lang#8498
  • Loading branch information
catamorphism committed Aug 14, 2013
1 parent e7b5729 commit cf4694e
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/compiletest/procsrv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ pub fn run(lib_path: &str,

let env = env + target_env(lib_path, prog);
let mut proc = run::Process::new(prog, args, run::ProcessOptions {
env: Some(env.slice(0, env.len())),
env: Some(env),
dir: None,
in_fd: None,
out_fd: None,
Expand Down
10 changes: 6 additions & 4 deletions src/librustpkg/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ fn mk_temp_workspace(short_name: &Path, version: &Version) -> Path {
fn run_git(args: &[~str], env: Option<~[(~str, ~str)]>, cwd: &Path, err_msg: &str) {
let cwd = (*cwd).clone();
let mut prog = run::Process::new("git", args, run::ProcessOptions {
env: env.map(|v| v.slice(0, v.len())),
env: env,
dir: Some(&cwd),
in_fd: None,
out_fd: None,
Expand Down Expand Up @@ -222,7 +222,7 @@ fn command_line_test_with_env(args: &[~str], cwd: &Path, env: Option<~[(~str, ~s
assert!(os::path_is_dir(&*cwd));
let cwd = (*cwd).clone();
let mut prog = run::Process::new(cmd, args, run::ProcessOptions {
env: env.map(|v| v.slice(0, v.len())),
env: env,
dir: Some(&cwd),
in_fd: None,
out_fd: None,
Expand Down Expand Up @@ -757,7 +757,9 @@ fn rust_path_test() {
// use command_line_test_with_env
let mut prog = run::Process::new("rustpkg",
[~"install", ~"foo"],
run::ProcessOptions { env: Some(&[(~"RUST_LOG",
// This should actually extend the environment; then we can probably
// un-ignore it
run::ProcessOptions { env: Some(~[(~"RUST_LOG",
~"rustpkg"),
(~"RUST_PATH",
dir_for_path.to_str())]),
Expand Down Expand Up @@ -1039,7 +1041,7 @@ fn test_extern_mod() {
~"--sysroot", test_sysroot().to_str(),
~"-o", exec_file.to_str()],
run::ProcessOptions {
env: env.map(|v| v.slice(0, v.len())),
env: env,
dir: Some(&dir),
in_fd: None,
out_fd: None,
Expand Down
20 changes: 10 additions & 10 deletions src/libstd/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ pub struct ProcessOptions<'self> {
* If this is Some(vec-of-names-and-values) then the new process will
* have an environment containing the given named values only.
*/
env: Option<&'self [(~str, ~str)]>,
env: Option<~[(~str, ~str)]>,

/**
* If this is None then the new process will use the same initial working
Expand Down Expand Up @@ -171,7 +171,7 @@ impl Process {
Some(fd) => (None, fd)
};

let res = spawn_process_os(prog, args, options.env, options.dir,
let res = spawn_process_os(prog, args, options.env.clone(), options.dir,
in_fd, out_fd, err_fd);

unsafe {
Expand Down Expand Up @@ -444,7 +444,7 @@ struct SpawnProcessResult {

#[cfg(windows)]
fn spawn_process_os(prog: &str, args: &[~str],
env: Option<&[(~str, ~str)]>,
env: Option<~[(~str, ~str)]>,
dir: Option<&Path>,
in_fd: c_int, out_fd: c_int, err_fd: c_int) -> SpawnProcessResult {

Expand Down Expand Up @@ -627,7 +627,7 @@ pub fn make_command_line(prog: &str, args: &[~str]) -> ~str {

#[cfg(unix)]
fn spawn_process_os(prog: &str, args: &[~str],
env: Option<&[(~str, ~str)]>,
env: Option<~[(~str, ~str)]>,
dir: Option<&Path>,
in_fd: c_int, out_fd: c_int, err_fd: c_int) -> SpawnProcessResult {

Expand Down Expand Up @@ -717,7 +717,7 @@ fn with_argv<T>(prog: &str, args: &[~str], cb: &fn(**libc::c_char) -> T) -> T {
}

#[cfg(unix)]
fn with_envp<T>(env: Option<&[(~str, ~str)]>, cb: &fn(*c_void) -> T) -> T {
fn with_envp<T>(env: Option<~[(~str, ~str)]>, cb: &fn(*c_void) -> T) -> T {
use vec;

// On posixy systems we can pass a char** for envp, which is a
Expand Down Expand Up @@ -749,7 +749,7 @@ fn with_envp<T>(env: Option<&[(~str, ~str)]>, cb: &fn(*c_void) -> T) -> T {
}

#[cfg(windows)]
fn with_envp<T>(env: Option<&[(~str, ~str)]>, cb: &fn(*mut c_void) -> T) -> T {
fn with_envp<T>(env: Option<~[(~str, ~str)]>, cb: &fn(*mut c_void) -> T) -> T {
// On win32 we pass an "environment block" which is not a char**, but
// rather a concatenation of null-terminated k=v\0 sequences, with a final
// \0 to terminate.
Expand Down Expand Up @@ -1284,22 +1284,22 @@ mod tests {
}

#[cfg(unix,not(target_os="android"))]
fn run_env(env: Option<&[(~str, ~str)]>) -> run::Process {
fn run_env(env: Option<~[(~str, ~str)]>) -> run::Process {
run::Process::new("env", [], run::ProcessOptions {
env: env,
.. run::ProcessOptions::new()
})
}
#[cfg(unix,target_os="android")]
fn run_env(env: Option<&[(~str, ~str)]>) -> run::Process {
fn run_env(env: Option<~[(~str, ~str)]>) -> run::Process {
run::Process::new("/system/bin/sh", [~"-c",~"set"], run::ProcessOptions {
env: env,
.. run::ProcessOptions::new()
})
}

#[cfg(windows)]
fn run_env(env: Option<&[(~str, ~str)]>) -> run::Process {
fn run_env(env: Option<~[(~str, ~str)]>) -> run::Process {
run::Process::new("cmd", [~"/c", ~"set"], run::ProcessOptions {
env: env,
.. run::ProcessOptions::new()
Expand Down Expand Up @@ -1344,7 +1344,7 @@ mod tests {
let mut new_env = os::env();
new_env.push((~"RUN_TEST_NEW_ENV", ~"123"));

let mut prog = run_env(Some(new_env.slice(0, new_env.len())));
let mut prog = run_env(Some(new_env));
let output = str::from_bytes(prog.finish_with_output().output);

assert!(output.contains("RUN_TEST_NEW_ENV=123"));
Expand Down

0 comments on commit cf4694e

Please sign in to comment.