@@ -370,35 +370,31 @@ impl Process {
370
370
}
371
371
#[ cfg( all( feature = "maps" , target_os = "linux" ) ) ]
372
372
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 ( )
375
375
{
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 } ) ;
400
396
}
401
- Err ( Error :: last_os_error ( ) )
397
+ Ok ( maps )
402
398
}
403
399
404
400
#[ cfg( all( feature = "maps" , target_os = "windows" ) ) ]
0 commit comments