From 62fc0f0184618def6b5fafaa8e435038eed74a3c Mon Sep 17 00:00:00 2001 From: hedgecrw85 Date: Thu, 10 Jan 2019 11:39:59 -0600 Subject: [PATCH] InputStream.read() throws SerialPortTimeoutException instead of silently returning same character --- src/main/java/com/fazecast/jSerialComm/SerialPort.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fazecast/jSerialComm/SerialPort.java b/src/main/java/com/fazecast/jSerialComm/SerialPort.java index cabcd25..ed3cf05 100644 --- a/src/main/java/com/fazecast/jSerialComm/SerialPort.java +++ b/src/main/java/com/fazecast/jSerialComm/SerialPort.java @@ -1236,11 +1236,17 @@ public final class SerialPort } @Override - public final int read() throws SerialPortIOException + public final int read() throws SerialPortIOException, SerialPortTimeoutException { + // Perform error checking if (!isOpened) throw new SerialPortIOException("This port appears to have been shutdown or disconnected."); - return (readBytes(portHandle, byteBuffer, 1L, 0) < 0) ? -1 : ((int)byteBuffer[0] & 0xFF); + + // Read from the serial port + int numRead = readBytes(portHandle, byteBuffer, 1L, 0); + if (numRead == 0) + throw new SerialPortTimeoutException("The read operation timed out before any data was returned."); + return (numRead < 0) ? -1 : ((int)byteBuffer[0] & 0xFF); } @Override