@@ -86,34 +86,36 @@ impl FromStr for MapsEntry {
86
86
// e.g.: "7f5985f46000-7f5985f48000 rw-p 00039000 103:06 76021795 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2"
87
87
// e.g.: "35b1a21000-35b1a22000 rw-p 00000000 00:00 0"
88
88
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" ;
89
91
let mut parts = s
90
92
. split ( ' ' ) // space-separated fields
91
93
. 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 ) ?;
97
99
let pathname_str = parts. next ( ) . unwrap_or ( "" ) ; // pathname may be omitted.
98
100
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 ) ;
100
102
let address = if let Some ( ( start, limit) ) = range_str. split_once ( '-' ) {
101
103
( hex ( start) ?, hex ( limit) ?)
102
104
} else {
103
- return Err ( "Couldn't parse address range" ) ;
105
+ return Err ( parse_err ) ;
104
106
} ;
105
107
let _perms = if let & [ r, w, x, p, ..] = perms_str. as_bytes ( ) {
106
108
// If a system in the future adds a 5th field to the permission list,
107
109
// there's no reason to assume previous fields were invalidated.
108
110
[ r, w, x, p]
109
111
} else {
110
- return Err ( "less than 4 perms" ) ;
112
+ return Err ( parse_err ) ;
111
113
} ;
112
114
let _offset = hex ( offset_str) ?;
113
115
let _dev = if let Some ( ( major, minor) ) = dev_str. split_once ( ':' ) {
114
116
( hex ( major) ?, hex ( minor) ?)
115
117
} else {
116
- return Err ( "Couldn't parse dev" ) ;
118
+ return Err ( parse_err ) ;
117
119
} ;
118
120
let _inode = hex ( inode_str) ?;
119
121
let pathname = pathname_str. into ( ) ;
0 commit comments