From 0236f00d26e56d390c8651986e724473dbf9a615 Mon Sep 17 00:00:00 2001
From: tkchia <tkchia@users.noreply.github.com>
Date: Sat, 16 Jul 2022 17:16:45 +0000
Subject: [PATCH] plat/msdos86: fix: read() on O_TEXT fd should try to return
 any errors signaled by low-level read

---
 plat/msdos86/libsys/read.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/plat/msdos86/libsys/read.c b/plat/msdos86/libsys/read.c
index 71711832e..5075958bd 100644
--- a/plat/msdos86/libsys/read.c
+++ b/plat/msdos86/libsys/read.c
@@ -33,6 +33,10 @@ ssize_t read(int fd, void* buffer, size_t count)
 	 * file pointer to just before the ^Z.  Also set an internal flag
 	 * for the fd so that we do not try to read any further (until e.g. 
 	 * a seek happens).
+	 *
+	 * If a low-level read returns an error (-1) before anything has
+	 * actually been read, we can pass the error indication (-1) up to
+	 * the caller.
 	 */
 	p = buffer;
 	tot = 0;
@@ -41,7 +45,7 @@ ssize_t read(int fd, void* buffer, size_t count)
 	{
 		r = _sys_rawread(fd, p, count - (p - (char *)buffer));
 		if (r <= 0)
-			return tot;
+			return tot ? tot : r;
 
 		q = memchr(p, 0x1a, (size_t)r);
 		if (q)