Check the return value of I/O operations for failure
authorNathan Binkert <nate@binkert.org>
Fri, 19 Sep 2008 16:11:42 +0000 (09:11 -0700)
committerNathan Binkert <nate@binkert.org>
Fri, 19 Sep 2008 16:11:42 +0000 (09:11 -0700)
src/base/loader/hex_file.cc
src/base/remote_gdb.cc
src/dev/ethertap.cc

index 17347531eb1458360c69318b40d2c4ae1bb8f53b..61d6c80096da2515ae242140aa458ad123b6fc45 100755 (executable)
@@ -65,7 +65,9 @@ HexFile::loadSections(Port *memPort)
     Addr MemAddr;
     uint32_t Data;
     while (!feof(fp)) {
-        fgets(Line, 64, fp);
+        char *ret = fgets(Line, sizeof(Line), fp);
+        if (!ret)
+            panic("malformed file");
         parseLine(Line, &MemAddr, &Data);
         if (MemAddr != 0) {
             // Now, write to memory
index fe4bdad5a531c6595b0fb8e9acb8cbbcb9aa8c2b..93d86447e80dccfb1a611e6736e2f34608d9fb33 100644 (file)
@@ -346,14 +346,16 @@ uint8_t
 BaseRemoteGDB::getbyte()
 {
     uint8_t b;
-    ::read(fd, &b, 1);
+    if (::read(fd, &b, 1) != 1)
+        warn("could not read byte from debugger");
     return b;
 }
 
 void
 BaseRemoteGDB::putbyte(uint8_t b)
 {
-    ::write(fd, &b, 1);
+    if (::write(fd, &b, 1) != 1)
+        warn("could not write byte to debugger");
 }
 
 // Send a packet to gdb
index c7b292c8a878f3fc7c1d125a8d5c6f2960abbe62..f1fd1800ba7ad091587df19f24ee05171adb2a4d 100644 (file)
@@ -182,8 +182,12 @@ EtherTap::recvPacket(EthPacketPtr packet)
     DPRINTF(Ethernet, "EtherTap output len=%d\n", packet->length);
     DDUMP(EthernetData, packet->data, packet->length);
     uint32_t len = htonl(packet->length);
-    write(socket, &len, sizeof(len));
-    write(socket, packet->data, packet->length);
+    ssize_t ret = write(socket, &len, sizeof(len));
+    if (ret != sizeof(len))
+        return false;
+    ret = write(socket, packet->data, packet->length);
+    if (ret != packet->length)
+        return false;
 
     interface->recvDone();