Merge pull request #7 from DasenB/master
catch type conversion error and prevent infinite loop
This commit is contained in:
@@ -209,6 +209,8 @@ public enum PortError: Int32, Error {
|
||||
case mustReceiveOrTransmit
|
||||
case mustBeOpen
|
||||
case stringsMustBeUTF8
|
||||
case unableToConvertByteToCharacter
|
||||
case deviceNotConnected
|
||||
}
|
||||
|
||||
public class SerialPort {
|
||||
@@ -371,6 +373,12 @@ extension SerialPort {
|
||||
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
|
||||
}
|
||||
@@ -424,6 +432,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 {
|
||||
|
||||
Reference in New Issue
Block a user