diff options
| author | Yonggang Luo <luoyonggang@gmail.com> | 2020-10-08 22:26:31 +0000 | 
|---|---|---|
| committer | Yonggang Luo <luoyonggang@gmail.com> | 2021-02-17 17:54:04 +0000 | 
| commit | fa23ddf6e6932b0caa6ee14bd479264398a3a2a7 (patch) | |
| tree | 8a6836facce8391bf03150f7634d7649c5b8cd5d /library/std/src/sys/windows/process.rs | |
| parent | ee88f46bb5e27c4d9f30326e69ff2298dcbeecb1 (diff) | |
| download | rust-fa23ddf6e6932b0caa6ee14bd479264398a3a2a7.tar.gz rust-fa23ddf6e6932b0caa6ee14bd479264398a3a2a7.zip | |
Expose force_quotes on Windows.
Quotes the arg and not quotes the arg have different effect on Windows when the program called are msys2/cygwin program. Refer to https://github.com/msys2/MSYS2-packages/issues/2176 Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Diffstat (limited to 'library/std/src/sys/windows/process.rs')
| -rw-r--r-- | library/std/src/sys/windows/process.rs | 12 | 
1 files changed, 9 insertions, 3 deletions
| diff --git a/library/std/src/sys/windows/process.rs b/library/std/src/sys/windows/process.rs index 243065b94b1..83d37795ee5 100644 --- a/library/std/src/sys/windows/process.rs +++ b/library/std/src/sys/windows/process.rs @@ -78,6 +78,7 @@ pub struct Command { stdin: Option<Stdio>, stdout: Option<Stdio>, stderr: Option<Stdio>, + force_quotes_enabled: bool, } pub enum Stdio { @@ -109,6 +110,7 @@ impl Command { stdin: None, stdout: None, stderr: None, + force_quotes_enabled: false, } } @@ -134,6 +136,10 @@ impl Command { self.flags = flags; } + pub fn force_quotes(&mut self, enabled: bool) { + self.force_quotes_enabled = enabled; + } + pub fn get_program(&self) -> &OsStr { &self.program } @@ -181,7 +187,7 @@ impl Command { si.dwFlags = c::STARTF_USESTDHANDLES; let program = program.as_ref().unwrap_or(&self.program); - let mut cmd_str = make_command_line(program, &self.args)?; + let mut cmd_str = make_command_line(program, &self.args, self.force_quotes_enabled)?; cmd_str.push(0); // add null terminator // stolen from the libuv code. @@ -467,7 +473,7 @@ fn zeroed_process_information() -> c::PROCESS_INFORMATION { // Produces a wide string *without terminating null*; returns an error if // `prog` or any of the `args` contain a nul. -fn make_command_line(prog: &OsStr, args: &[OsString]) -> io::Result<Vec<u16>> { +fn make_command_line(prog: &OsStr, args: &[OsString], force_quotes: bool) -> io::Result<Vec<u16>> { // Encode the command and arguments in a command line string such // that the spawned process may recover them using CommandLineToArgvW. let mut cmd: Vec<u16> = Vec::new(); @@ -476,7 +482,7 @@ fn make_command_line(prog: &OsStr, args: &[OsString]) -> io::Result<Vec<u16>> { append_arg(&mut cmd, prog, true)?; for arg in args { cmd.push(' ' as u16); - append_arg(&mut cmd, arg, false)?; + append_arg(&mut cmd, arg, force_quotes)?; } return Ok(cmd); | 
