plat/msdos86: fix: read() on O_TEXT fd should try to return any errors signaled by low-level read

This commit is contained in:
tkchia 2022-07-16 17:16:45 +00:00
parent bca0a5381d
commit 0236f00d26

View file

@ -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 * 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. * for the fd so that we do not try to read any further (until e.g.
* a seek happens). * 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; p = buffer;
tot = 0; 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)); r = _sys_rawread(fd, p, count - (p - (char *)buffer));
if (r <= 0) if (r <= 0)
return tot; return tot ? tot : r;
q = memchr(p, 0x1a, (size_t)r); q = memchr(p, 0x1a, (size_t)r);
if (q) if (q)