@@ -110,13 +110,11 @@ impl<'a> ArArchiveBuilder<'a> {
110
110
}
111
111
112
112
fn try_filter_fat_archs (
113
- archs : object :: read :: Result < & [ impl FatArch ] > ,
113
+ archs : & [ impl FatArch ] ,
114
114
target_arch : object:: Architecture ,
115
115
archive_path : & Path ,
116
116
archive_map_data : & [ u8 ] ,
117
117
) -> io:: Result < Option < PathBuf > > {
118
- let archs = archs. map_err ( |e| io:: Error :: new ( io:: ErrorKind :: Other , e) ) ?;
119
-
120
118
let desired = match archs. iter ( ) . find ( |a| a. architecture ( ) == target_arch) {
121
119
Some ( a) => a,
122
120
None => return Ok ( None ) ,
@@ -146,17 +144,15 @@ pub fn try_extract_macho_fat_archive(
146
144
_ => return Ok ( None ) ,
147
145
} ;
148
146
149
- match object:: macho:: FatHeader :: parse ( & * archive_map) {
150
- Ok ( h) if h. magic . get ( object:: endian:: BigEndian ) == object:: macho:: FAT_MAGIC => {
151
- let archs = object:: macho:: FatHeader :: parse_arch32 ( & * archive_map) ;
152
- try_filter_fat_archs ( archs, target_arch, archive_path, & * archive_map)
153
- }
154
- Ok ( h) if h. magic . get ( object:: endian:: BigEndian ) == object:: macho:: FAT_MAGIC_64 => {
155
- let archs = object:: macho:: FatHeader :: parse_arch64 ( & * archive_map) ;
156
- try_filter_fat_archs ( archs, target_arch, archive_path, & * archive_map)
157
- }
147
+ if let Ok ( h) = object:: read:: macho:: MachOFatFile32 :: parse ( & * archive_map) {
148
+ let archs = h. arches ( ) ;
149
+ try_filter_fat_archs ( archs, target_arch, archive_path, & * archive_map)
150
+ } else if let Ok ( h) = object:: read:: macho:: MachOFatFile64 :: parse ( & * archive_map) {
151
+ let archs = h. arches ( ) ;
152
+ try_filter_fat_archs ( archs, target_arch, archive_path, & * archive_map)
153
+ } else {
158
154
// Not a FatHeader at all, just return None.
159
- _ => Ok ( None ) ,
155
+ Ok ( None )
160
156
}
161
157
}
162
158
0 commit comments