SETranslatingPortProxy: fix bug in tryReadString()
authorSteve Reinhardt <steve.reinhardt@amd.com>
Mon, 6 Aug 2012 23:57:11 +0000 (16:57 -0700)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Mon, 6 Aug 2012 23:57:11 +0000 (16:57 -0700)
Off-by-one loop termination meant that we were stuffing
the terminating '\0' into the std::string value, which
makes for difficult-to-debug string comparison failures.

src/mem/se_translating_port_proxy.cc

index 72466655c40fdac2e906107a7b99de61ddcd917d..7857217f6791bb6bcbd57e1b2eb3fc0f805f1244 100644 (file)
@@ -190,15 +190,18 @@ SETranslatingPortProxy::tryReadString(std::string &str, Addr addr) const
 
     Addr vaddr = addr;
 
-    do {
+    while (true) {
         Addr paddr;
 
         if (!pTable->translate(vaddr++, paddr))
             return false;
 
         PortProxy::readBlob(paddr, &c, 1);
+        if (c == '\0')
+            break;
+
         str += c;
-    } while (c);
+    }
 
     return true;
 }