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