Andreas Sandberg has submitted this change and it was merged. ( https://gem5-review.googlesource.com/2962 )

Change subject: util: Correctly handle short writes in m5 (read|exec)file
......................................................................

util: Correctly handle short writes in m5 (read|exec)file

The m5 tool has subcommands that writes a file to the simulated file
system. The implementation of this command currently doesn't check the
return value from write, which leads to compiler warnings and
potentially incorrect behavior. Add the necessary checks.

Change-Id: If558534d3245aa24cf15edf06bd0af4c6ba3908c
Signed-off-by: Andreas Sandberg <[email protected]>
Reviewed-by: Nikos Nikoleris <[email protected]>
Reviewed-on: https://gem5-review.googlesource.com/2962
Reviewed-by: Jason Lowe-Power <[email protected]>
Reviewed-by: Gabe Black <[email protected]>
---
M util/m5/m5.c
1 file changed, 20 insertions(+), 4 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved
  Gabe Black: Looks good to me, approved
  Andreas Sandberg: Looks good to me, approved



diff --git a/util/m5/m5.c b/util/m5/m5.c
index 8e21276..d39098c 100644
--- a/util/m5/m5.c
+++ b/util/m5/m5.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011 ARM Limited
+ * Copyright (c) 2011, 2017 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -107,9 +107,9 @@
 int
 read_file(int dest_fid)
 {
-    char buf[256*1024];
+    uint8_t buf[256*1024];
     int offset = 0;
-    int len;
+    int len, ret;

     // Touch all buffer pages to ensure they are mapped in the
     // page table. This is required in the case of X86_FS, where
@@ -117,9 +117,25 @@
     memset(buf, 0, sizeof(buf));

     while ((len = m5_readfile(buf, sizeof(buf), offset)) > 0) {
-        write(dest_fid, buf, len);
+        uint8_t *base = buf;
         offset += len;
+        do {
+            ret = write(dest_fid, base, len);
+            if (ret < 0) {
+                perror("Failed to write file");
+                exit(2);
+            } else if (ret == 0) {
+                fprintf(stderr, "Failed to write file: "
+                        "Unhandled short write\n");
+                exit(2);
+            }
+
+            base += ret;
+            len -= ret;
+        } while (len);
     }
+
+    return offset;
 }

 void

--
To view, visit https://gem5-review.googlesource.com/2962
To unsubscribe, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: If558534d3245aa24cf15edf06bd0af4c6ba3908c
Gerrit-Change-Number: 2962
Gerrit-PatchSet: 5
Gerrit-Owner: Andreas Sandberg <[email protected]>
Gerrit-Reviewer: Andreas Sandberg <[email protected]>
Gerrit-Reviewer: Gabe Black <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: Nikos Nikoleris <[email protected]>
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to