0 is a valid return value for read so only break out if read returns -1.
diff --git a/fpgautils.c b/fpgautils.c
index a62b491..57bd7d5 100644
--- a/fpgautils.c
+++ b/fpgautils.c
@@ -252,7 +252,7 @@ _serial_read(int fd, char *buf, size_t bufsiz, char *eol)
ssize_t len, tlen = 0;
while (bufsiz) {
len = read(fd, buf, eol ? 1 : bufsiz);
- if (len < 1)
+ if (unlikely(len == -1))
break;
tlen += len;
if (eol && *eol == buf[0])