mirror of
https://github.com/rust-lang/rust.git
synced 2025-11-17 05:26:05 +00:00
use ReadCache for archive loading
This commit is contained in:
parent
7db7489f9b
commit
9f1cfec299
@ -1172,7 +1172,7 @@ fn attempt_load_dylib(path: &Path) -> Result<libloading::Library, libloading::Er
|
||||
// the expected format is lib<name>.a(libname.so) for the actual
|
||||
// dynamic library
|
||||
let library_name = path.file_stem().expect("expect a library name");
|
||||
let mut archive_member = OsString::from("a(");
|
||||
let mut archive_member = std::ffi::OsString::from("a(");
|
||||
archive_member.push(library_name);
|
||||
archive_member.push(".so)");
|
||||
let new_path = path.with_extension(archive_member);
|
||||
|
||||
@ -47,7 +47,7 @@ fd-lock = "4.0"
|
||||
home = "0.5"
|
||||
ignore = "0.4"
|
||||
libc = "0.2"
|
||||
object = { version = "0.36.3", default-features = false, features = ["archive", "coff", "read_core", "unaligned"] }
|
||||
object = { version = "0.36.3", default-features = false, features = ["archive", "coff", "read_core", "std", "unaligned"] }
|
||||
opener = "0.5"
|
||||
semver = "1.0"
|
||||
serde = "1.0"
|
||||
|
||||
@ -61,18 +61,18 @@ pub fn is_dylib(path: &Path) -> bool {
|
||||
}
|
||||
|
||||
fn is_aix_shared_archive(path: &Path) -> bool {
|
||||
// FIXME(#133268): reading the entire file as &[u8] into memory seems excessive
|
||||
// look into either mmap it or use the ReadCache
|
||||
let data = match fs::read(path) {
|
||||
Ok(data) => data,
|
||||
Err(_) => return false,
|
||||
};
|
||||
let file = match ArchiveFile::parse(&*data) {
|
||||
let file = match fs::File::open(path) {
|
||||
Ok(file) => file,
|
||||
Err(_) => return false,
|
||||
};
|
||||
let reader = object::ReadCache::new(file);
|
||||
let archive = match ArchiveFile::parse(&reader) {
|
||||
Ok(result) => result,
|
||||
Err(_) => return false,
|
||||
};
|
||||
|
||||
file.members()
|
||||
archive
|
||||
.members()
|
||||
.filter_map(Result::ok)
|
||||
.any(|entry| String::from_utf8_lossy(entry.name()).contains(".so"))
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user