mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 13:33:31 +00:00
Copy dylib to temp directory
This commit is contained in:
parent
3e24444aee
commit
5a5bba5a46
1 changed files with 18 additions and 1 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
use crate::{proc_macro::bridge, rustc_server::TokenStream};
|
||||
use std::fs::File;
|
||||
use std::path::Path;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
use goblin::{mach::Mach, Object};
|
||||
use libloading::Library;
|
||||
|
@ -123,6 +123,9 @@ impl Expander {
|
|||
.canonicalize()
|
||||
.unwrap_or_else(|err| panic!("Cannot canonicalize {}: {:?}", lib.display(), err));
|
||||
|
||||
// Copy the dylib to temp directory to prevent locking in Windows
|
||||
let lib = copy_to_temp_dir(&lib).map_err(|e| e.to_string())?;
|
||||
|
||||
let library = ProcMacroLibraryImpl::open(&lib).map_err(|e| e.to_string())?;
|
||||
|
||||
Ok(Expander { inner: library })
|
||||
|
@ -195,3 +198,17 @@ impl Expander {
|
|||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
fn copy_to_temp_dir(path: &Path) -> io::Result<PathBuf> {
|
||||
let mut to = std::env::temp_dir();
|
||||
let file_name = path.file_name().ok_or_else(|| {
|
||||
io::Error::new(
|
||||
io::ErrorKind::InvalidInput,
|
||||
format!("File path is invalid: {}", path.display()),
|
||||
)
|
||||
})?;
|
||||
|
||||
to.push(file_name);
|
||||
std::fs::copy(path, &to)?;
|
||||
Ok(to)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue