Skip to content

Commit

Permalink
Merge pull request nygard#31 from 0xced/better-error-message
Browse files Browse the repository at this point in the history
Better error message when running class-dump on a static library
  • Loading branch information
nygard committed Sep 19, 2013
2 parents 9bf7037 + 9fd3de5 commit b6fa0ec
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 7 deletions.
12 changes: 9 additions & 3 deletions Source/CDClassDump.m
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,15 @@ - (BOOL)loadFile:(CDFile *)file error:(NSError *__autoreleasing *)error;
//NSLog(@"machOFile: %@", machOFile);
if (machOFile == nil) {
if (error != NULL) {
NSDictionary *userInfo = @{
NSLocalizedFailureReasonErrorKey : [NSString stringWithFormat:@"File doesn't contain the specified architecture (%@). Available architectures are %@.", CDNameForCPUType(_targetArch.cputype, _targetArch.cpusubtype), file.architectureNameDescription],
};
NSString *failureReason;
NSString *targetArchName = CDNameForCPUType(_targetArch.cputype, _targetArch.cpusubtype);
if ([file isKindOfClass:[CDFatFile class]] && [(CDFatFile *)file containsArchitecture:_targetArch]) {
failureReason = [NSString stringWithFormat:@"Fat file doesn't contain a valid Mach-O file for the specified architecture (%@). "
"It probably means that class-dump was run on a static library, which is not supported.", targetArchName];
} else {
failureReason = [NSString stringWithFormat:@"File doesn't contain the specified architecture (%@). Available architectures are %@.", targetArchName, file.architectureNameDescription];
}
NSDictionary *userInfo = @{ NSLocalizedFailureReasonErrorKey : failureReason };
*error = [NSError errorWithDomain:CDErrorDomain_ClassDump code:0 userInfo:userInfo];
}
return NO;
Expand Down
1 change: 1 addition & 0 deletions Source/CDFatFile.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@
@property (nonatomic, readonly) NSArray *archNames;

- (void)addArchitecture:(CDFatArch *)fatArch;
- (BOOL)containsArchitecture:(CDArch)arch;

@end
14 changes: 12 additions & 2 deletions Source/CDFatFile.m
Original file line number Diff line number Diff line change
Expand Up @@ -121,16 +121,21 @@ - (BOOL)bestMatchForArch:(CDArch *)ioArchPtr;
return NO;
}

- (CDMachOFile *)machOFileWithArch:(CDArch)cdarch;
- (CDFatArch *)fatArchWithArch:(CDArch)cdarch;
{
for (CDFatArch *arch in self.arches) {
if (arch.cputype == cdarch.cputype && arch.maskedCPUSubtype == (cdarch.cpusubtype & ~CPU_SUBTYPE_MASK))
return arch.machOFile;
return arch;
}

return nil;
}

- (CDMachOFile *)machOFileWithArch:(CDArch)cdarch;
{
return [[self fatArchWithArch:cdarch] machOFile];
}

- (NSArray *)archNames;
{
NSMutableArray *archNames = [NSMutableArray array];
Expand All @@ -153,4 +158,9 @@ - (void)addArchitecture:(CDFatArch *)fatArch;
[self.arches addObject:fatArch];
}

- (BOOL)containsArchitecture:(CDArch)arch;
{
return [self fatArchWithArch:arch] != nil;
}

@end
2 changes: 1 addition & 1 deletion class-dump.m
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ void print_usage(void)
" where options are:\n"
" -a show instance variable offsets\n"
" -A show implementation addresses\n"
" --arch <arch> choose a specific architecture from a universal binary (ppc, ppc64, i386, x86_64)\n"
" --arch <arch> choose a specific architecture from a universal binary (ppc, ppc64, i386, x86_64, armv6, armv7, armv7s, arm64)\n"
" -C <regex> only display classes matching regular expression\n"
" -f <str> find string in method name\n"
" -H generate header files in current directory, or directory specified with -o\n"
Expand Down
2 changes: 1 addition & 1 deletion deprotect.m
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ void print_usage(void)
"Usage: deprotect [options] <input file> <output file>\n"
"\n"
" where options are:\n"
" --arch <arch> choose a specific architecture from a universal binary (ppc, ppc64, i386, x86_64)\n"
" --arch <arch> choose a specific architecture from a universal binary (ppc, ppc64, i386, x86_64, armv6, armv7, armv7s, arm64)\n"
,
CLASS_DUMP_VERSION
);
Expand Down

0 comments on commit b6fa0ec

Please sign in to comment.