From 1b9591e07acee6937f262647ab5f6da244fb4049 Mon Sep 17 00:00:00 2001 From: bjarnedevel0per <> Date: Tue, 11 Sep 2018 08:30:41 +0200 Subject: [PATCH 1/2] catch type conversion error --- Sources/SwiftSerial.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Sources/SwiftSerial.swift b/Sources/SwiftSerial.swift index e6f24ad..0add9b7 100644 --- a/Sources/SwiftSerial.swift +++ b/Sources/SwiftSerial.swift @@ -209,6 +209,7 @@ public enum PortError: Int32, Error { case mustReceiveOrTransmit case mustBeOpen case stringsMustBeUTF8 + case unableToConvertByteToCharacter } public class SerialPort { @@ -424,6 +425,9 @@ extension SerialPort { let bytesRead = try readBytes(into: buffer, size: 1) if bytesRead > 0 { + if ( buffer[0] > 127) { + throw PortError.unableToConvertByteToCharacter + } let character = CChar(buffer[0]) if character == terminator { From db7a3b79a296c75f9f43f9006f6efbe2869616b3 Mon Sep 17 00:00:00 2001 From: bjarnedevel0per <> Date: Tue, 11 Sep 2018 10:26:36 +0200 Subject: [PATCH 2/2] handle removal of the serialdevice --- Sources/SwiftSerial.swift | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Sources/SwiftSerial.swift b/Sources/SwiftSerial.swift index 0add9b7..706618d 100644 --- a/Sources/SwiftSerial.swift +++ b/Sources/SwiftSerial.swift @@ -210,6 +210,7 @@ public enum PortError: Int32, Error { case mustBeOpen case stringsMustBeUTF8 case unableToConvertByteToCharacter + case deviceNotConnected } public class SerialPort { @@ -371,7 +372,13 @@ extension SerialPort { guard let fileDescriptor = fileDescriptor else { throw PortError.mustBeOpen } - + + var s: stat = stat() + fstat(fileDescriptor, &s) + if s.st_nlink != 1 { + throw PortError.deviceNotConnected + } + let bytesRead = read(fileDescriptor, buffer, size) return bytesRead }