@@ -20,7 +20,7 @@ pub(super) struct MapsEntry {
20
20
/// x = execute
21
21
/// s = shared
22
22
/// p = private (copy on write)
23
- perms : [ char ; 4 ] ,
23
+ perms : [ u8 ; 4 ] ,
24
24
/// Offset into the file (or "whatever").
25
25
offset : u64 ,
26
26
/// device (major, minor)
@@ -132,14 +132,12 @@ impl FromStr for MapsEntry {
132
132
} else {
133
133
return Err ( "Couldn't parse address range" ) ;
134
134
} ;
135
- let perms: [ char ; 4 ] = {
136
- let mut chars = perms_str. chars ( ) ;
137
- let mut c = || chars. next ( ) . ok_or ( "insufficient perms" ) ;
138
- let perms = [ c ( ) ?, c ( ) ?, c ( ) ?, c ( ) ?] ;
139
- if chars. next ( ) . is_some ( ) {
140
- return Err ( "too many perms" ) ;
141
- }
142
- perms
135
+ let perms = if let & [ r, w, x, p, ..] = perms_str. as_bytes ( ) {
136
+ // If a system in the future adds a 5th field to the permission list,
137
+ // there's no reason to assume previous fields were invalidated.
138
+ [ r, w, x, p]
139
+ } else {
140
+ return Err ( "less than 4 perms" ) ;
143
141
} ;
144
142
let offset = hex64 ( offset_str) ?;
145
143
let dev = if let Some ( ( major, minor) ) = dev_str. split_once ( ':' ) {
@@ -172,7 +170,7 @@ fn check_maps_entry_parsing_64bit() {
172
170
. unwrap( ) ,
173
171
MapsEntry {
174
172
address: ( 0xffffffffff600000 , 0xffffffffff601000 ) ,
175
- perms: [ '-' , '-' , 'x' , 'p' ] ,
173
+ perms: * b"--xp" ,
176
174
offset: 0x00000000 ,
177
175
dev: ( 0x00 , 0x00 ) ,
178
176
inode: 0x0 ,
@@ -187,7 +185,7 @@ fn check_maps_entry_parsing_64bit() {
187
185
. unwrap( ) ,
188
186
MapsEntry {
189
187
address: ( 0x7f5985f46000 , 0x7f5985f48000 ) ,
190
- perms: [ 'r' , 'w' , '-' , 'p' ] ,
188
+ perms: * b"rw-p" ,
191
189
offset: 0x00039000 ,
192
190
dev: ( 0x103 , 0x06 ) ,
193
191
inode: 0x76021795 ,
@@ -200,7 +198,7 @@ fn check_maps_entry_parsing_64bit() {
200
198
. unwrap( ) ,
201
199
MapsEntry {
202
200
address: ( 0x35b1a21000 , 0x35b1a22000 ) ,
203
- perms: [ 'r' , 'w' , '-' , 'p' ] ,
201
+ perms: * b"rw-p" ,
204
202
offset: 0x00000000 ,
205
203
dev: ( 0x00 , 0x00 ) ,
206
204
inode: 0x0 ,
@@ -224,7 +222,7 @@ fn check_maps_entry_parsing_32bit() {
224
222
. unwrap( ) ,
225
223
MapsEntry {
226
224
address: ( 0x08056000 , 0x08077000 ) ,
227
- perms: [ 'r' , 'w' , '-' , 'p' ] ,
225
+ perms: * b"rw-p" ,
228
226
offset: 0x00000000 ,
229
227
dev: ( 0x00 , 0x00 ) ,
230
228
inode: 0x0 ,
@@ -239,7 +237,7 @@ fn check_maps_entry_parsing_32bit() {
239
237
. unwrap( ) ,
240
238
MapsEntry {
241
239
address: ( 0xb7c79000 , 0xb7e02000 ) ,
242
- perms: [ 'r' , '-' , '-' , 'p' ] ,
240
+ perms: * b"r--p" ,
243
241
offset: 0x00000000 ,
244
242
dev: ( 0x08 , 0x01 ) ,
245
243
inode: 0x60662705 ,
@@ -252,7 +250,7 @@ fn check_maps_entry_parsing_32bit() {
252
250
. unwrap( ) ,
253
251
MapsEntry {
254
252
address: ( 0xb7e02000 , 0xb7e03000 ) ,
255
- perms: [ 'r' , 'w' , '-' , 'p' ] ,
253
+ perms: * b"rw-p" ,
256
254
offset: 0x00000000 ,
257
255
dev: ( 0x00 , 0x00 ) ,
258
256
inode: 0x0 ,
0 commit comments