@@ -18,7 +18,7 @@ pub(super) struct MapsEntry {
18
18
/// x = execute
19
19
/// s = shared
20
20
/// p = private (copy on write)
21
- perms : [ char ; 4 ] ,
21
+ perms : [ u8 ; 4 ] ,
22
22
/// Offset into the file (or "whatever").
23
23
offset : usize ,
24
24
/// device (major, minor)
@@ -102,14 +102,12 @@ impl FromStr for MapsEntry {
102
102
} else {
103
103
return Err ( "Couldn't parse address range" ) ;
104
104
} ;
105
- let perms: [ char ; 4 ] = {
106
- let mut chars = perms_str. chars ( ) ;
107
- let mut c = || chars. next ( ) . ok_or ( "insufficient perms" ) ;
108
- let perms = [ c ( ) ?, c ( ) ?, c ( ) ?, c ( ) ?] ;
109
- if chars. next ( ) . is_some ( ) {
110
- return Err ( "too many perms" ) ;
111
- }
112
- perms
105
+ let perms = if let & [ r, w, x, p, ..] = perms_str. as_bytes ( ) {
106
+ // If a system in the future adds a 5th field to the permission list,
107
+ // there's no reason to assume previous fields were invalidated.
108
+ [ r, w, x, p]
109
+ } else {
110
+ return Err ( "less than 4 perms" ) ;
113
111
} ;
114
112
let offset = hex ( offset_str) ?;
115
113
let dev = if let Some ( ( major, minor) ) = dev_str. split_once ( ':' ) {
@@ -142,7 +140,7 @@ fn check_maps_entry_parsing_64bit() {
142
140
. unwrap( ) ,
143
141
MapsEntry {
144
142
address: ( 0xffffffffff600000 , 0xffffffffff601000 ) ,
145
- perms: [ '-' , '-' , 'x' , 'p' ] ,
143
+ perms: * b"--xp" ,
146
144
offset: 0x00000000 ,
147
145
dev: ( 0x00 , 0x00 ) ,
148
146
inode: 0x0 ,
@@ -157,7 +155,7 @@ fn check_maps_entry_parsing_64bit() {
157
155
. unwrap( ) ,
158
156
MapsEntry {
159
157
address: ( 0x7f5985f46000 , 0x7f5985f48000 ) ,
160
- perms: [ 'r' , 'w' , '-' , 'p' ] ,
158
+ perms: * b"rw-p" ,
161
159
offset: 0x00039000 ,
162
160
dev: ( 0x103 , 0x06 ) ,
163
161
inode: 0x76021795 ,
@@ -170,7 +168,7 @@ fn check_maps_entry_parsing_64bit() {
170
168
. unwrap( ) ,
171
169
MapsEntry {
172
170
address: ( 0x35b1a21000 , 0x35b1a22000 ) ,
173
- perms: [ 'r' , 'w' , '-' , 'p' ] ,
171
+ perms: * b"rw-p" ,
174
172
offset: 0x00000000 ,
175
173
dev: ( 0x00 , 0x00 ) ,
176
174
inode: 0x0 ,
@@ -194,7 +192,7 @@ fn check_maps_entry_parsing_32bit() {
194
192
. unwrap( ) ,
195
193
MapsEntry {
196
194
address: ( 0x08056000 , 0x08077000 ) ,
197
- perms: [ 'r' , 'w' , '-' , 'p' ] ,
195
+ perms: * b"rw-p" ,
198
196
offset: 0x00000000 ,
199
197
dev: ( 0x00 , 0x00 ) ,
200
198
inode: 0x0 ,
@@ -209,7 +207,7 @@ fn check_maps_entry_parsing_32bit() {
209
207
. unwrap( ) ,
210
208
MapsEntry {
211
209
address: ( 0xb7c79000 , 0xb7e02000 ) ,
212
- perms: [ 'r' , '-' , '-' , 'p' ] ,
210
+ perms: * b"r--p" ,
213
211
offset: 0x00000000 ,
214
212
dev: ( 0x08 , 0x01 ) ,
215
213
inode: 0x60662705 ,
@@ -222,7 +220,7 @@ fn check_maps_entry_parsing_32bit() {
222
220
. unwrap( ) ,
223
221
MapsEntry {
224
222
address: ( 0xb7e02000 , 0xb7e03000 ) ,
225
- perms: [ 'r' , 'w' , '-' , 'p' ] ,
223
+ perms: * b"rw-p" ,
226
224
offset: 0x00000000 ,
227
225
dev: ( 0x00 , 0x00 ) ,
228
226
inode: 0x0 ,
0 commit comments