aya: preallocate the vector

This code badly needs tests :(
pull/716/head
Tamir Duberstein 1 year ago
parent f095c591af
commit 89ef97e848
No known key found for this signature in database

@ -337,8 +337,8 @@ impl LdSoCache {
0
};
let mut entries = Vec::new();
for _ in 0..num_entries {
let entries = (0..num_entries)
.map(|_: u32| {
let flags = read_i32(&mut cursor)?;
let k_pos = read_u32(&mut cursor)? as usize;
let v_pos = read_u32(&mut cursor)? as usize;
@ -347,23 +347,24 @@ impl LdSoCache {
cursor.consume(12);
}
let key = unsafe {
CStr::from_ptr(cursor.get_ref()[offset + k_pos..].as_ptr() as *const c_char)
let read_str = |pos| {
unsafe {
CStr::from_ptr(cursor.get_ref()[offset + pos..].as_ptr() as *const c_char)
}
.to_string_lossy()
.into_owned();
let value = unsafe {
CStr::from_ptr(cursor.get_ref()[offset + v_pos..].as_ptr() as *const c_char)
}
.to_string_lossy()
.into_owned();
.into_owned()
};
let key = read_str(k_pos);
let value = read_str(v_pos);
entries.push(CacheEntry {
Ok::<_, io::Error>(CacheEntry {
key,
value,
_flags: flags,
});
}
})
})
.collect::<Result<_, _>>()?;
Ok(LdSoCache { entries })
}

Loading…
Cancel
Save