use std escape fn

pull/2761/head
FabianLars 1 month ago
parent f862372ae4
commit 43ed1eb70f
No known key found for this signature in database

@ -1371,19 +1371,38 @@ impl PathExt for PathBuf {
} }
} }
// adapted from https://github.com/rust-lang/rust/blob/1c047506f94cd2d05228eb992b0a6bbed1942349/library/std/src/sys/args/windows.rs#L174
#[cfg(windows)] #[cfg(windows)]
fn escape_nsis_current_exe_arg(arg: &&OsStr) -> String { fn escape_nsis_current_exe_arg(arg: &&OsStr) -> String {
let mut arg = arg.to_string_lossy().to_string(); let arg = arg.to_string_lossy();
let mut cmd: Vec<char> = Vec::new();
/* if arg.contains('"') { let quote = arg.chars().any(|c| c == ' ' || c == '\t' || c == '/') || arg.is_empty();
arg = arg.replace('"', r#""""#); let escape = true;
} */ if quote {
cmd.push('"');
if arg.contains(' ') || arg.contains('\t') || arg.contains('/') {
arg = format!("\"{arg}\"");
} }
let mut backslashes: usize = 0;
arg for x in arg.chars() {
if escape {
if x == '\\' {
backslashes += 1;
} else {
if x == '"' {
// Add n+1 backslashes to total 2n+1 before internal '"'.
cmd.extend((0..=backslashes).map(|_| '\\'));
}
backslashes = 0;
}
}
cmd.push(x);
}
if quote {
// Add n backslashes to total 2n before ending '"'.
cmd.extend((0..backslashes).map(|_| '\\'));
cmd.push('"');
}
cmd.into_iter().collect()
} }
#[cfg(windows)] #[cfg(windows)]

Loading…
Cancel
Save