From 3a570a9fee57d77923eb1e71dbadcd08bb39aa25 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Sun, 14 Sep 2014 11:52:52 +0000 Subject: Kernel: Implement the Close command for Archive, File and Directory. --- src/core/hle/kernel/archive.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/core/hle/kernel/archive.cpp') diff --git a/src/core/hle/kernel/archive.cpp b/src/core/hle/kernel/archive.cpp index 6161f4d0..a7fa661d 100644 --- a/src/core/hle/kernel/archive.cpp +++ b/src/core/hle/kernel/archive.cpp @@ -96,6 +96,13 @@ public: backend->SetSize(cmd_buff[1] | ((u64)cmd_buff[2] << 32)); break; } + case FileCommand::Close: + { + DEBUG_LOG(KERNEL, "Close %s %s", GetTypeName().c_str(), GetName().c_str()); + Kernel::g_object_pool.Destroy(GetHandle()); + CloseArchive(backend->GetIdCode()); + break; + } // Unknown command... default: { @@ -174,6 +181,13 @@ public: break; } + case FileCommand::Close: + { + DEBUG_LOG(KERNEL, "Close %s %s", GetTypeName().c_str(), GetName().c_str()); + Kernel::g_object_pool.Destroy(GetHandle()); + break; + } + // Unknown command... default: ERROR_LOG(KERNEL, "Unknown command=0x%08X!", cmd); @@ -230,6 +244,13 @@ public: break; } + case DirectoryCommand::Close: + { + DEBUG_LOG(KERNEL, "Close %s %s", GetTypeName().c_str(), GetName().c_str()); + Kernel::g_object_pool.Destroy(GetHandle()); + break; + } + // Unknown command... default: ERROR_LOG(KERNEL, "Unknown command=0x%08X!", cmd); @@ -269,6 +290,21 @@ Handle OpenArchive(FileSys::Archive::IdCode id_code) { return itr->second; } +/** + * Closes an archive + * @param id_code IdCode of the archive to open + * @return Result of operation, 0 on success, otherwise error code + */ +Result CloseArchive(FileSys::Archive::IdCode id_code) { + if (1 != g_archive_map.erase(id_code)) { + ERROR_LOG(KERNEL, "Cannot close archive %d", (int) id_code); + return -1; + } + + INFO_LOG(KERNEL, "Closed archive %d", (int) id_code); + return 0; +} + /** * Mounts an archive * @param archive Pointer to the archive to mount -- cgit v1.2.3