diff --git a/AVRsack/ASSerial.h b/AVRsack/ASSerial.h index 49fd934..bbfe17d 100644 --- a/AVRsack/ASSerial.h +++ b/AVRsack/ASSerial.h @@ -10,6 +10,12 @@ extern NSString * kASSerialPortsChanged; +@interface NSFileHandle (ExceptionSafety) + +- (NSData *)availableDataIgnoringExceptions; + +@end + @interface ASSerial : NSObject + (NSString *) fileNameForPort:(NSString *)port; diff --git a/AVRsack/ASSerial.mm b/AVRsack/ASSerial.mm index 5914ec8..32ac53e 100644 --- a/AVRsack/ASSerial.mm +++ b/AVRsack/ASSerial.mm @@ -17,6 +17,19 @@ static NSMutableDictionary * savedAttrs; NSString * kASSerialPortsChanged = @"PortsChanged"; +@implementation NSFileHandle (ExceptionSafety) + +- (NSData *)availableDataIgnoringExceptions { + @try { + return [self availableData]; + } + @catch (NSException *exception) { + return [NSData data]; + } +} + +@end + @implementation ASSerial + (void)initialize { diff --git a/AVRsack/ASSerialWin.swift b/AVRsack/ASSerialWin.swift index c4ec981..9ba6940 100644 --- a/AVRsack/ASSerialWin.swift +++ b/AVRsack/ASSerialWin.swift @@ -146,7 +146,7 @@ class ASSerialWin: NSWindowController { serialData = "" logView.setString(serialData) portHandle!.readabilityHandler = {(handle) in - let newData = handle.availableData + let newData = handle.availableDataIgnoringExceptions() let newString = NSString(data: newData, encoding: NSASCIIStringEncoding)! self.serialData += newString dispatch_async(dispatch_get_main_queue(), { () -> Void in