@@ -86,34 +86,36 @@ impl FromStr for MapsEntry {
8686 // e.g.: "7f5985f46000-7f5985f48000 rw-p 00039000 103:06 76021795 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2"
8787 // e.g.: "35b1a21000-35b1a22000 rw-p 00000000 00:00 0"
8888 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
89+ let missing_field = "failed to find all map fields" ;
90+ let parse_err = "failed to parse all map fields" ;
8991 let mut parts = s
9092 . split ( ' ' ) // space-separated fields
9193 . filter ( |s| s. len ( ) > 0 ) ; // multiple spaces implies empty strings that need to be skipped.
92- let range_str = parts. next ( ) . ok_or ( "Couldn't find address" ) ?;
93- let perms_str = parts. next ( ) . ok_or ( "Couldn't find permissions" ) ?;
94- let offset_str = parts. next ( ) . ok_or ( "Couldn't find offset" ) ?;
95- let dev_str = parts. next ( ) . ok_or ( "Couldn't find dev" ) ?;
96- let inode_str = parts. next ( ) . ok_or ( "Couldn't find inode" ) ?;
94+ let range_str = parts. next ( ) . ok_or ( missing_field ) ?;
95+ let perms_str = parts. next ( ) . ok_or ( missing_field ) ?;
96+ let offset_str = parts. next ( ) . ok_or ( missing_field ) ?;
97+ let dev_str = parts. next ( ) . ok_or ( missing_field ) ?;
98+ let inode_str = parts. next ( ) . ok_or ( missing_field ) ?;
9799 let pathname_str = parts. next ( ) . unwrap_or ( "" ) ; // pathname may be omitted.
98100
99- let hex = |s| usize:: from_str_radix ( s, 16 ) . map_err ( |_| "Couldn't parse hex number" ) ;
101+ let hex = |s| usize:: from_str_radix ( s, 16 ) . map_err ( |_| parse_err ) ;
100102 let address = if let Some ( ( start, limit) ) = range_str. split_once ( '-' ) {
101103 ( hex ( start) ?, hex ( limit) ?)
102104 } else {
103- return Err ( "Couldn't parse address range" ) ;
105+ return Err ( parse_err ) ;
104106 } ;
105107 let _perms = if let & [ r, w, x, p, ..] = perms_str. as_bytes ( ) {
106108 // If a system in the future adds a 5th field to the permission list,
107109 // there's no reason to assume previous fields were invalidated.
108110 [ r, w, x, p]
109111 } else {
110- return Err ( "less than 4 perms" ) ;
112+ return Err ( parse_err ) ;
111113 } ;
112114 let _offset = hex ( offset_str) ?;
113115 let _dev = if let Some ( ( major, minor) ) = dev_str. split_once ( ':' ) {
114116 ( hex ( major) ?, hex ( minor) ?)
115117 } else {
116- return Err ( "Couldn't parse dev" ) ;
118+ return Err ( parse_err ) ;
117119 } ;
118120 let _inode = hex ( inode_str) ?;
119121 let pathname = pathname_str. into ( ) ;
0 commit comments