Skip to content

Commit d90389e

Browse files
cgzonesetke
authored andcommitted
Simplify parse_maps()
Remove one indentation level by forwarding potential errors.
1 parent 42bbe24 commit d90389e

File tree

1 file changed

+23
-27
lines changed

1 file changed

+23
-27
lines changed

src/proc.rs

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -370,35 +370,31 @@ impl Process {
370370
}
371371
#[cfg(all(feature = "maps", target_os = "linux"))]
372372
pub fn parse_maps(pid: usize) -> Result<Vec<MapEntry>, Error> {
373-
let mut maps: Vec<MapEntry> = Vec::new();
374-
if let Ok(maps_str) = fs::read_to_string(format!("/proc/{}/maps", pid))
373+
let mut maps = Vec::new();
374+
for line in fs::read_to_string(format!("/proc/{}/maps", pid))?.lines()
375375
{
376-
for line in maps_str.lines() {
377-
let mut split_line = line.split_whitespace();
378-
let (start_str, end_str) = split_line
379-
.next()
380-
.ok_or(ErrorKind::InvalidData)?
381-
.split_once('-')
382-
.ok_or(ErrorKind::InvalidData)?;
383-
let region = Region::new(
384-
usize::from_str_radix(start_str, 16).unwrap_or(0),
385-
usize::from_str_radix(end_str, 16).unwrap_or(0),
386-
);
387-
let flags = MapFlags::new(
388-
split_line.next().ok_or(ErrorKind::InvalidData)?,
389-
);
390-
split_line.next(); // skip offset
391-
split_line.next(); // skip dev
392-
split_line.next(); // skip inode
393-
let pathname =
394-
Some(split_line.collect::<Vec<&str>>().join(" "))
395-
.filter(|x| !x.is_empty())
396-
.map(PathBuf::from);
397-
maps.push(MapEntry { region, flags, pathname });
398-
}
399-
return Ok(maps);
376+
let mut split_line = line.split_whitespace();
377+
let (start_str, end_str) = split_line
378+
.next()
379+
.ok_or(ErrorKind::InvalidData)?
380+
.split_once('-')
381+
.ok_or(ErrorKind::InvalidData)?;
382+
let region = Region::new(
383+
usize::from_str_radix(start_str, 16).unwrap_or(0),
384+
usize::from_str_radix(end_str, 16).unwrap_or(0),
385+
);
386+
let flags = MapFlags::new(
387+
split_line.next().ok_or(ErrorKind::InvalidData)?,
388+
);
389+
split_line.next(); // skip offset
390+
split_line.next(); // skip dev
391+
split_line.next(); // skip inode
392+
let pathname = Some(split_line.collect::<Vec<&str>>().join(" "))
393+
.filter(|x| !x.is_empty())
394+
.map(PathBuf::from);
395+
maps.push(MapEntry { region, flags, pathname });
400396
}
401-
Err(Error::last_os_error())
397+
Ok(maps)
402398
}
403399

404400
#[cfg(all(feature = "maps", target_os = "windows"))]

0 commit comments

Comments
 (0)