summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorPavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>2018-02-27 12:52:59 +0300
committerPaolo Bonzini <pbonzini@redhat.com>2018-03-12 17:10:37 +0100
commit6dc0f5296359ff59c248215a965c8658dea9544b (patch)
tree48abd96abda931fe2128b30cbe8482f7bf95d1d8
parentd759c951f3287fad04210a52f2dc93f94cf58c7f (diff)
downloadfocaccia-qemu-6dc0f5296359ff59c248215a965c8658dea9544b.tar.gz
focaccia-qemu-6dc0f5296359ff59c248215a965c8658dea9544b.zip
replay: check return values of fwrite
This patch adds error reporting when fwrite cannot completely
save the buffer to the file.

Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
Message-Id: <20180227095259.1060.86410.stgit@pasha-VirtualBox>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
-rw-r--r--replay/replay-internal.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/replay/replay-internal.c b/replay/replay-internal.c
index 8e7474f787..b077cb5fd5 100644
--- a/replay/replay-internal.c
+++ b/replay/replay-internal.c
@@ -24,12 +24,23 @@
 static QemuMutex lock;
 
 /* File for replay writing */
+static bool write_error;
 FILE *replay_file;
 
+static void replay_write_error(void)
+{
+    if (!write_error) {
+        error_report("replay write error");
+        write_error = true;
+    }
+}
+
 void replay_put_byte(uint8_t byte)
 {
     if (replay_file) {
-        putc(byte, replay_file);
+        if (putc(byte, replay_file) == EOF) {
+            replay_write_error();
+        }
     }
 }
 
@@ -62,7 +73,9 @@ void replay_put_array(const uint8_t *buf, size_t size)
 {
     if (replay_file) {
         replay_put_dword(size);
-        fwrite(buf, 1, size, replay_file);
+        if (fwrite(buf, 1, size, replay_file) != size) {
+            replay_write_error();
+        }
     }
 }