From e232152db6d9cd511a75c41f47b00befe9b7719e Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Mon, 6 Aug 2012 16:55:28 -0700 Subject: syscall_emul: clean up open() code a bit. --- src/sim/syscall_emul.hh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/sim/syscall_emul.hh') diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh index b2786e572..b5a8e49d4 100644 --- a/src/sim/syscall_emul.hh +++ b/src/sim/syscall_emul.hh @@ -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. -- cgit v1.2.3