@@ -24,15 +24,14 @@ impl Mapping {
24
24
Context :: new ( stash, Object :: parse ( data) ?, None , None )
25
25
} else {
26
26
let archive = ArchiveFile :: parse ( data) . ok ( ) ?;
27
- for member in archive. members ( ) {
28
- if let Ok ( member) = member {
29
- let name = OsStr :: from_bytes ( member. name ( ) ) ;
30
- if name == member_name {
31
- let member_data = member. data ( data) . ok ( ) ?;
32
- if let Some ( obj) = Object :: parse ( member_data) {
33
- return Context :: new ( stash, obj, None , None ) ;
34
- }
35
- }
27
+ for member in archive
28
+ . members ( )
29
+ . filter_map ( |m| m. ok ( ) )
30
+ . filter ( |m| OsStr :: from_bytes ( m. name ( ) ) == member_name)
31
+ {
32
+ let member_data = member. data ( data) . ok ( ) ?;
33
+ if let Some ( obj) = Object :: parse ( member_data) {
34
+ return Context :: new ( stash, obj, None , None ) ;
36
35
}
37
36
}
38
37
None
@@ -64,16 +63,20 @@ pub fn parse_xcoff(data: &[u8]) -> Option<Image> {
64
63
let _ = header. aux_header ( data, & mut offset) . ok ( ) ?;
65
64
let sections = header. sections ( data, & mut offset) . ok ( ) ?;
66
65
if let Some ( section) = sections. iter ( ) . find ( |s| {
67
- let name = str:: from_utf8 ( & s. s_name ( ) [ 0 ..5 ] ) . unwrap ( ) ;
68
- return name == ".text" ;
66
+ if let Ok ( name) = str:: from_utf8 ( & s. s_name ( ) [ 0 ..5 ] ) {
67
+ name == ".text"
68
+ } else {
69
+ false
70
+ }
69
71
} ) {
70
- return Some ( Image {
72
+ Some ( Image {
71
73
offset : section. s_scnptr ( ) as usize ,
72
74
base : section. s_paddr ( ) as u64 ,
73
75
size : section. s_size ( ) as usize ,
74
- } ) ;
76
+ } )
77
+ } else {
78
+ None
75
79
}
76
- return None ;
77
80
}
78
81
79
82
pub fn parse_image ( path : & Path , member_name : & OsString ) -> Option < Image > {
@@ -83,18 +86,17 @@ pub fn parse_image(path: &Path, member_name: &OsString) -> Option<Image> {
83
86
return parse_xcoff ( data) ;
84
87
} else {
85
88
let archive = ArchiveFile :: parse ( data) . ok ( ) ?;
86
- for member in archive. members ( ) {
87
- if let Ok ( member) = member {
88
- let name = OsStr :: from_bytes ( member. name ( ) ) ;
89
- if name == member_name {
90
- let member_data = member. data ( data) . ok ( ) ?;
91
- if let Some ( image) = parse_xcoff ( member_data) {
92
- return Some ( image) ;
93
- }
94
- }
89
+ for member in archive
90
+ . members ( )
91
+ . filter_map ( |m| m. ok ( ) )
92
+ . filter ( |m| OsStr :: from_bytes ( m. name ( ) ) == member_name)
93
+ {
94
+ let member_data = member. data ( data) . ok ( ) ?;
95
+ if let Some ( image) = parse_xcoff ( member_data) {
96
+ return Some ( image) ;
95
97
}
96
98
}
97
- return None ;
99
+ None
98
100
}
99
101
}
100
102
@@ -108,7 +110,7 @@ impl<'a> Object<'a> {
108
110
containing_csect : Some ( index) ,
109
111
} => {
110
112
if let Ok ( tgt_sym) = file. symbol_by_index ( index) {
111
- return Self :: get_concrete_size ( file, & tgt_sym) ;
113
+ Self :: get_concrete_size ( file, & tgt_sym)
112
114
} else {
113
115
0
114
116
}
@@ -141,7 +143,7 @@ impl<'a> Object<'a> {
141
143
} )
142
144
. collect :: < Vec < _ > > ( ) ;
143
145
syms. sort_by_key ( |s| s. address ) ;
144
- return Some ( Object { syms, file } ) ;
146
+ Some ( Object { syms, file } )
145
147
}
146
148
147
149
pub fn section ( & self , _: & Stash , name : & str ) -> Option < & ' a [ u8 ] > {
0 commit comments