diff options
| author | BhaaL <bhaal@0x1337.org> | 2016-03-20 13:09:21 +0100 |
|---|---|---|
| committer | BhaaL <bhaal@0x1337.org> | 2016-03-20 13:10:51 +0100 |
| commit | a449ef4e1159651d04bae48d693f1073303b43af (patch) | |
| tree | 9c52141e4ddc9131ef007808c7c0cee5fb02f5a2 /Source/Core/DiscIO/NANDContentLoader.cpp | |
| parent | 8a6d9e1e0b2fe407dd986b4982ca77e91f0604c3 (diff) | |
properly open/close the file to avoid rapid open/close cycles
ES_OPENCONTENT and ES_CLOSECONTENT now call Open and Close respectively,
as the old code did.
Diffstat (limited to 'Source/Core/DiscIO/NANDContentLoader.cpp')
| -rw-r--r-- | Source/Core/DiscIO/NANDContentLoader.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/Source/Core/DiscIO/NANDContentLoader.cpp b/Source/Core/DiscIO/NANDContentLoader.cpp index 6a9fc29bdf..b7f5deb9c1 100644 --- a/Source/Core/DiscIO/NANDContentLoader.cpp +++ b/Source/Core/DiscIO/NANDContentLoader.cpp @@ -91,34 +91,49 @@ std::string CSharedContent::AddSharedContent(const u8* hash) return filename; } - +void CNANDContentDataFile::EnsureOpen() +{ + if (!m_file) + m_file = std::make_unique<File::IOFile>(m_filename, "rb"); + else if (!m_file->IsOpen()) + m_file->Open(m_filename, "rb"); +} +void CNANDContentDataFile::Open() +{ + EnsureOpen(); +} const std::vector<u8> CNANDContentDataFile::Get() { std::vector<u8> result; - File::IOFile file(m_filename, "rb"); - if (!file.IsGood()) + EnsureOpen(); + if (!m_file->IsGood()) return result; - u64 size = file.GetSize(); + u64 size = m_file->GetSize(); if (size == 0) return result; result.resize(size); - file.ReadBytes(result.data(), result.size()); + m_file->ReadBytes(result.data(), result.size()); return result; } bool CNANDContentDataFile::GetRange(u32 start, u32 size, u8* buffer) { - File::IOFile file(m_filename, "rb"); - if (!file.IsGood()) + EnsureOpen(); + if (!m_file->IsGood()) return false; - if (!file.Seek(start, SEEK_SET)) + if (!m_file->Seek(start, SEEK_SET)) return false; - return file.ReadBytes(buffer, static_cast<size_t>(size)); + return m_file->ReadBytes(buffer, static_cast<size_t>(size)); +} +void CNANDContentDataFile::Close() +{ + if (m_file && m_file->IsOpen()) + m_file->Close(); } |
