From 3aeca4624a9ccaaa084b3d7c619b60dcbcd915b7 Mon Sep 17 00:00:00 2001 From: Michael Meissner Date: Mon, 23 Feb 1998 18:21:13 +0000 Subject: [PATCH] Handle short reads and EOF --- sim/common/ChangeLog | 4 ++++ sim/common/syscall.c | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) 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); -- 2.30.2