From a449ef4e1159651d04bae48d693f1073303b43af Mon Sep 17 00:00:00 2001 From: BhaaL Date: Sun, 20 Mar 2016 13:09:21 +0100 Subject: 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. --- Source/Core/DiscIO/NANDContentLoader.cpp | 33 +++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'Source/Core/DiscIO/NANDContentLoader.cpp') 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(m_filename, "rb"); + else if (!m_file->IsOpen()) + m_file->Open(m_filename, "rb"); +} +void CNANDContentDataFile::Open() +{ + EnsureOpen(); +} const std::vector CNANDContentDataFile::Get() { std::vector 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)); + return m_file->ReadBytes(buffer, static_cast(size)); +} +void CNANDContentDataFile::Close() +{ + if (m_file && m_file->IsOpen()) + m_file->Close(); } -- cgit v1.2.3