Skip to content

Commit

Permalink
Handle absence of NSJSONSerialization gracefully
Browse files Browse the repository at this point in the history
  • Loading branch information
Simon Whitaker committed May 31, 2013
1 parent 017ef21 commit 12fd8ab
Showing 1 changed file with 21 additions and 17 deletions.
38 changes: 21 additions & 17 deletions ddcli/DDGetoptLongParser.m
Original file line number Diff line number Diff line change
Expand Up @@ -170,23 +170,27 @@ - (NSArray *) parseOptions
NSArray * arguments = [processInfo arguments];

if (mArgumentsFilename != nil) {
NSFileManager *fm = [NSFileManager defaultManager];
NSString *argumentsFilePath = [[fm currentDirectoryPath] stringByAppendingPathComponent:mArgumentsFilename];
if ([fm fileExistsAtPath:argumentsFilePath]) {
NSError *error;
NSArray *argumentsFromFile = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:argumentsFilePath] options:0 error:&error];
if (argumentsFromFile != nil) {
NSAssert([arguments count] > 0, @"Process has no arguments (not even the command). Weird.");
NSString *command = [arguments objectAtIndex:0];
arguments = [arguments subarrayWithRange:NSMakeRange(1, [arguments count] - 1)];

NSMutableArray *mutableArguments = [NSMutableArray arrayWithObject:command];
[mutableArguments addObjectsFromArray:argumentsFromFile];
[mutableArguments addObjectsFromArray:arguments];
arguments = [NSArray arrayWithArray:mutableArguments];
} else {
fprintf(stderr, "Error reading %s: %s\n", [mArgumentsFilename UTF8String], [[error localizedDescription] UTF8String]);
exit(1);
if (NSClassFromString(@"NSJSONSerialization") == nil) {
fprintf(stderr, "Warning: ignoring %s, feature supported from OS X 10.7 onwards\n", [mArgumentsFilename UTF8String]);
} else {
NSFileManager *fm = [NSFileManager defaultManager];
NSString *argumentsFilePath = [[fm currentDirectoryPath] stringByAppendingPathComponent:mArgumentsFilename];
if ([fm fileExistsAtPath:argumentsFilePath]) {
NSError *error;
NSArray *argumentsFromFile = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:argumentsFilePath] options:0 error:&error];
if (argumentsFromFile != nil) {
NSAssert([arguments count] > 0, @"Process has no arguments (not even the command). Weird.");
NSString *command = [arguments objectAtIndex:0];
arguments = [arguments subarrayWithRange:NSMakeRange(1, [arguments count] - 1)];

NSMutableArray *mutableArguments = [NSMutableArray arrayWithObject:command];
[mutableArguments addObjectsFromArray:argumentsFromFile];
[mutableArguments addObjectsFromArray:arguments];
arguments = [NSArray arrayWithArray:mutableArguments];
} else {
fprintf(stderr, "Error reading %s: %s\n", [mArgumentsFilename UTF8String], [[error localizedDescription] UTF8String]);
exit(1);
}
}
}
}
Expand Down

0 comments on commit 12fd8ab

Please sign in to comment.