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

Loading…
Cancel
Save