From: Michael Meissner Date: Mon, 23 Feb 1998 18:21:13 +0000 (+0000) Subject: Handle short reads and EOF X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3aeca4624a9ccaaa084b3d7c619b60dcbcd915b7;p=binutils-gdb.git Handle short reads and EOF --- diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index 0bf3696f173..70af484429e 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,3 +1,7 @@ +Mon Feb 23 13:19:58 1998 Michael Meissner + + * syscall.c (cb_syscall): Handle short reads, and EOF. + Tue Feb 24 00:29:57 1998 Andrew Cagney * sim-trace.c (print_data): case trace_fmt_fp missing break. Use diff --git a/sim/common/syscall.c b/sim/common/syscall.c index b73cd99b393..0bd891ec2c3 100644 --- a/sim/common/syscall.c +++ b/sim/common/syscall.c @@ -279,6 +279,8 @@ cb_syscall (cb, sc) ? count : FILE_XFR_SIZE)); if (result == -1) goto ErrorFinish; + if (result == 0) /* EOF */ + break; bytes_written = (*sc->write_mem) (cb, sc, addr, buf, result); if (bytes_written != result) { @@ -289,6 +291,9 @@ cb_syscall (cb, sc) bytes_read += result; count -= result; addr += result; + /* If this is a short read, don't go back for more */ + if (result != FILE_XFR_SIZE) + break; } result = bytes_read; } @@ -322,7 +327,7 @@ cb_syscall (cb, sc) result = (int) (*cb->write_stdout) (cb, buf, bytes_read); (*cb->flush_stdout) (cb); } - if (fd == 2) + else if (fd == 2) { result = (int) (*cb->write_stderr) (cb, buf, bytes_read); (*cb->flush_stderr) (cb);