Skip to content

Commit 530377a

Browse files
committed
PBEasyPipe: Fall back to ASCII encoding when UTF-8 fails
This seems to be the only sensible thing to do, as we can't guess what the encoding would otherwise be.
1 parent 56a6adc commit 530377a

File tree

1 file changed

+14
-21
lines changed

1 file changed

+14
-21
lines changed

PBEasyPipe.m

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,7 @@ + (NSString*) outputForCommand:(NSString *) cmd
5151
inDir:(NSString *) dir
5252
retValue:(int *) ret
5353
{
54-
NSTask *task = [self taskForCommand:cmd withArgs:args inDir:dir];
55-
NSFileHandle* handle = [task.standardOutput fileHandleForReading];
56-
[task launch];
57-
58-
NSData* data = [handle readDataToEndOfFile];
59-
NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
60-
61-
// Strip trailing newline
62-
if ([string hasSuffix:@"\n"])
63-
string = [string substringToIndex:[string length]-1];
64-
65-
[task waitUntilExit];
66-
if (ret)
67-
*ret = [task terminationStatus];
68-
return string;
54+
return [self outputForCommand:cmd withArgs:args inDir:dir inputString:NULL retValue:ret];
6955
}
7056

7157
// TODO: Refactor this to use the function above
@@ -77,15 +63,20 @@ + (NSString*) outputForCommand:(NSString *) cmd
7763
{
7864
NSTask *task = [self taskForCommand:cmd withArgs:args inDir:dir];
7965
NSFileHandle* handle = [task.standardOutput fileHandleForReading];
80-
task.standardInput = [NSPipe pipe];
81-
NSFileHandle *inHandle = [task.standardInput fileHandleForWriting];
82-
[inHandle writeData:[input dataUsingEncoding:NSUTF8StringEncoding]];
83-
[inHandle closeFile];
66+
67+
if (input) {
68+
task.standardInput = [NSPipe pipe];
69+
NSFileHandle *inHandle = [task.standardInput fileHandleForWriting];
70+
[inHandle writeData:[input dataUsingEncoding:NSUTF8StringEncoding]];
71+
[inHandle closeFile];
72+
}
8473

8574
[task launch];
8675

8776
NSData* data = [handle readDataToEndOfFile];
88-
NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
77+
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
78+
if (!string)
79+
string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
8980

9081
// Strip trailing newline
9182
if ([string hasSuffix:@"\n"])
@@ -108,7 +99,9 @@ + (NSString*) outputForCommand: (NSString*) cmd withArgs: (NSArray*) args inDir
10899
[task launch];
109100
#warning This can cause a "Bad file descriptor"... when?
110101
NSData* data = [handle readDataToEndOfFile];
111-
NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
102+
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
103+
if (!string)
104+
string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
112105

113106
// Strip trailing newline
114107
if ([string hasSuffix:@"\n"])

0 commit comments

Comments
 (0)