summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiam Murphy <43807659+Liamolucko@users.noreply.github.com>2021-01-24 04:40:13 +1100
committerGitHub <noreply@github.com>2021-01-24 02:40:13 +0900
commita61389a55e7c2df88460f11ee07b415efcdff791 (patch)
tree9c563ec645ea54dd53f098434a275bd304e444a0
parent1518fabfbba3cb951357f7c7977d6346943a9a8f (diff)
fix(compile): fix panic when cross-compiling between windows and unix (#9203)
-rw-r--r--cli/tools/standalone.rs6
-rw-r--r--cli/tools/upgrade.rs5
2 files changed, 8 insertions, 3 deletions
diff --git a/cli/tools/standalone.rs b/cli/tools/standalone.rs
index 8cc574e50..884d2a31d 100644
--- a/cli/tools/standalone.rs
+++ b/cli/tools/standalone.rs
@@ -48,7 +48,11 @@ pub async fn get_base_binary(
}
let archive_data = tokio::fs::read(binary_path).await?;
- let base_binary_path = crate::tools::upgrade::unpack(archive_data, exe_name)?;
+ let base_binary_path = crate::tools::upgrade::unpack(
+ archive_data,
+ exe_name,
+ target.contains("windows"),
+ )?;
let base_binary = tokio::fs::read(base_binary_path).await?;
Ok(base_binary)
}
diff --git a/cli/tools/upgrade.rs b/cli/tools/upgrade.rs
index e00127fa4..e98ecf5ff 100644
--- a/cli/tools/upgrade.rs
+++ b/cli/tools/upgrade.rs
@@ -109,7 +109,7 @@ pub async fn upgrade_command(
println!("Deno is upgrading to version {}", &install_version);
let old_exe_path = std::env::current_exe()?;
- let new_exe_path = unpack(archive_data, "deno")?;
+ let new_exe_path = unpack(archive_data, "deno", cfg!(windows))?;
let permissions = fs::metadata(&old_exe_path)?.permissions();
fs::set_permissions(&new_exe_path, permissions)?;
check_exe(&new_exe_path)?;
@@ -177,12 +177,13 @@ async fn download_package(
pub fn unpack(
archive_data: Vec<u8>,
exe_name: &str,
+ is_windows: bool,
) -> Result<PathBuf, std::io::Error> {
// We use into_path so that the tempdir is not automatically deleted. This is
// useful for debugging upgrade, but also so this function can return a path
// to the newly uncompressed file without fear of the tempdir being deleted.
let temp_dir = TempDir::new()?.into_path();
- let exe_ext = if cfg!(windows) { "exe" } else { "" };
+ let exe_ext = if is_windows { "exe" } else { "" };
let archive_path = temp_dir.join(exe_name).with_extension(".zip");
let exe_path = temp_dir.join(exe_name).with_extension(exe_ext);
assert!(!exe_path.exists());