From 614c43029f1ec06cee2014e0cfaa76c0d6ce6889 Mon Sep 17 00:00:00 2001 From: Matthew Parlane Date: Tue, 31 Jan 2012 19:12:21 +1300 Subject: [PATCH] fixed files so they can have more than one handle opened at a time. --- Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp | 2 +- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp | 4 ++-- .../Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp | 11 +++++------ Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.h | 8 +++++--- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp index 921d704a69..fb16c38661 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp @@ -285,7 +285,7 @@ void ExecuteCommand(u32 _Address) DeviceID = GetDeviceIDByName(DeviceName); // check if a device with this name has been created already - if (DeviceID == -1) + if (DeviceName.find("/dev/") == std::string::npos || DeviceID == -1) { if (DeviceName.find("/dev/") != std::string::npos) { diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp index d17e50e0cd..c0aece3407 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp @@ -168,7 +168,7 @@ bool CWII_IPC_HLE_Device_FileIO::Open(u32 _CommandAddress, u32 _Mode) else if (ReturnValue == 0) { ERROR_LOG(WII_IPC_FILEIO, " FileIO failed open: %s (%s) - I/O Error", m_Filename.c_str(), Modes[_Mode]); - ReturnValue = FS_INVALID_ARGUMENT; + ReturnValue = FS_RESULT_FATAL; } if (_CommandAddress) @@ -179,7 +179,7 @@ bool CWII_IPC_HLE_Device_FileIO::Open(u32 _CommandAddress, u32 _Mode) bool CWII_IPC_HLE_Device_FileIO::Seek(u32 _CommandAddress) { - u32 ReturnValue = FS_INVALID_ARGUMENT; + u32 ReturnValue = FS_RESULT_FATAL; const s32 SeekPosition = Memory::Read_U32(_CommandAddress + 0xC); const s32 Mode = Memory::Read_U32(_CommandAddress + 0x10); diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp index c2ed0fac36..1b32410ef0 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp @@ -109,17 +109,16 @@ bool CWII_IPC_HLE_Device_fs::IOCtlV(u32 _CommandAddress) if (!File::Exists(DirName)) { WARN_LOG(WII_IPC_FILEIO, "FS: Search not found: %s", DirName.c_str()); - ReturnValue = FS_DIRFILE_NOT_FOUND; + ReturnValue = FS_FILE_NOT_EXIST; break; } - - // AyuanX: what if we return "found one successfully" if it is a file? else if (!File::IsDirectory(DirName)) { // It's not a directory, so error. - // Games don't usually seem to care WHICH error they get, as long as it's <0 - WARN_LOG(WII_IPC_FILEIO, "\tNot a directory - return FS_INVALID_ARGUMENT"); - ReturnValue = FS_INVALID_ARGUMENT; + // Games don't usually seem to care WHICH error they get, as long as it's < + // Well the system menu CARES! + WARN_LOG(WII_IPC_FILEIO, "\tNot a directory - return FS_RESULT_FATAL"); + ReturnValue = FS_RESULT_FATAL; break; } diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.h index be78de7e39..1afb01cf8d 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.h @@ -31,12 +31,14 @@ struct NANDStat }; enum { - FS_RESULT_OK = 0, + FS_RESULT_OK = 0, + FS_INVALID = -4, FS_DIRFILE_NOT_FOUND = -6, - FS_INVALID_ARGUMENT = -101, + FS_RESULT_FATAL = -101, + FS_NO_ACCESS = -102, FS_FILE_EXIST = -105, FS_FILE_NOT_EXIST = -106, - FS_RESULT_FATAL = -128, + FS_NO_HANDLE = -106, }; class CWII_IPC_HLE_Device_fs : public IWII_IPC_HLE_Device