3 Commits

Author SHA1 Message Date
Yeo Kheng Meng
581ebc7e10 Merge pull request #7 from DasenB/master
catch type conversion error and prevent infinite loop
2018-09-16 21:52:48 +08:00
bjarnedevel0per
db7a3b79a2 handle removal of the serialdevice 2018-09-11 10:26:36 +02:00
bjarnedevel0per
1b9591e07a catch type conversion error 2018-09-11 08:30:41 +02:00

View File

@@ -209,6 +209,8 @@ public enum PortError: Int32, Error {
case mustReceiveOrTransmit case mustReceiveOrTransmit
case mustBeOpen case mustBeOpen
case stringsMustBeUTF8 case stringsMustBeUTF8
case unableToConvertByteToCharacter
case deviceNotConnected
} }
public class SerialPort { public class SerialPort {
@@ -370,7 +372,13 @@ extension SerialPort {
guard let fileDescriptor = fileDescriptor else { guard let fileDescriptor = fileDescriptor else {
throw PortError.mustBeOpen throw PortError.mustBeOpen
} }
var s: stat = stat()
fstat(fileDescriptor, &s)
if s.st_nlink != 1 {
throw PortError.deviceNotConnected
}
let bytesRead = read(fileDescriptor, buffer, size) let bytesRead = read(fileDescriptor, buffer, size)
return bytesRead return bytesRead
} }
@@ -424,6 +432,9 @@ extension SerialPort {
let bytesRead = try readBytes(into: buffer, size: 1) let bytesRead = try readBytes(into: buffer, size: 1)
if bytesRead > 0 { if bytesRead > 0 {
if ( buffer[0] > 127) {
throw PortError.unableToConvertByteToCharacter
}
let character = CChar(buffer[0]) let character = CChar(buffer[0])
if character == terminator { if character == terminator {