syscall_emul: clean up open() code a bit.
authorSteve Reinhardt <steve.reinhardt@amd.com>
Mon, 6 Aug 2012 23:55:28 +0000 (16:55 -0700)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Mon, 6 Aug 2012 23:55:28 +0000 (16:55 -0700)
src/kern/linux/linux.cc
src/kern/operatingsystem.cc
src/sim/syscall_emul.hh

index 62c25e2dfa0cbfffaecf971508b0e14cb8633e43..8214aeb97e12dc5b043e2492ce535705a48f587f 100644 (file)
@@ -38,7 +38,8 @@
 #include "sim/system.hh"
 
 int
-Linux::openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc)
+Linux::openSpecialFile(std::string path, LiveProcess *process,
+                       ThreadContext *tc)
 {
     DPRINTF(SyscallVerbose, "Opening special file: %s\n", path.c_str());
     if (path.compare(0, 13, "/proc/meminfo") == 0) {
@@ -51,7 +52,7 @@ Linux::openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc
         return fd;
     }
 
-    warn("Attempting to open special file: %s. Ignorning. Simulation may"
+    warn("Attempting to open special file: %s. Ignoring. Simulation may"
             " take un-expected code path or be non-deterministic until proper"
             "  handling is implemented.\n", path.c_str());
     return -1;
index 62fcdba7a72609187bbf02b46f922deb1467cb36..ce4092c4a914114d84257e252f2b550417fba36e 100644 (file)
 #include "kern/operatingsystem.hh"
 
 int
-OperatingSystem::openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc)
+OperatingSystem::openSpecialFile(std::string path, LiveProcess *process,
+                                 ThreadContext *tc)
 {
-    warn("Attempting to open special file: %s. Ignorning. Simulation may"
+    warn("Attempting to open special file: %s. Ignoring. Simulation may"
             " take un-expected code path or be non-deterministic until proper"
             "  handling is implemented.\n", path.c_str());
     return -1;
index b2786e572281d605b55072fab2db39a876e5aa25..b5a8e49d4bc57a7584f7995db361dc5d1b156dbb 100644 (file)
@@ -640,17 +640,22 @@ openFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
     DPRINTF(SyscallVerbose, "opening file %s\n", path.c_str());
 
     int fd;
+    int local_errno;
     if (startswith(path, "/proc/") || startswith(path, "/system/") ||
         startswith(path, "/platform/") || startswith(path, "/sys/")) {
-        // It's a proc/sys entery and requires special handling
+        // It's a proc/sys entry and requires special handling
         fd = OS::openSpecialFile(path, process, tc);
-        return (fd == -1) ? -1 : process->alloc_fd(fd,path.c_str(),hostFlags,mode, false);
+        local_errno = ENOENT;
      } else {
         // open the file
         fd = open(path.c_str(), hostFlags, mode);
-        return (fd == -1) ? -errno : process->alloc_fd(fd,path.c_str(),hostFlags,mode, false);
+        local_errno = errno;
      }
 
+    if (fd == -1)
+        return -local_errno;
+
+    return process->alloc_fd(fd, path.c_str(), hostFlags, mode, false);
 }
 
 /// Target sysinfo() handler.