@@ -110,13 +110,11 @@ impl<'a> ArArchiveBuilder<'a> {
110110}
111111
112112fn try_filter_fat_archs (
113- archs : object :: read :: Result < & [ impl FatArch ] > ,
113+ archs : & [ impl FatArch ] ,
114114 target_arch : object:: Architecture ,
115115 archive_path : & Path ,
116116 archive_map_data : & [ u8 ] ,
117117) -> io:: Result < Option < PathBuf > > {
118- let archs = archs. map_err ( |e| io:: Error :: new ( io:: ErrorKind :: Other , e) ) ?;
119-
120118 let desired = match archs. iter ( ) . find ( |a| a. architecture ( ) == target_arch) {
121119 Some ( a) => a,
122120 None => return Ok ( None ) ,
@@ -146,17 +144,15 @@ pub fn try_extract_macho_fat_archive(
146144 _ => return Ok ( None ) ,
147145 } ;
148146
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 {
158154 // Not a FatHeader at all, just return None.
159- _ => Ok ( None ) ,
155+ Ok ( None )
160156 }
161157}
162158
0 commit comments