diff options
| author | Mat M <mathew1800@gmail.com> | 2017-01-11 08:30:16 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-11 08:30:16 -0500 |
| commit | 55b82e323cbcf123b0ba78af6089968b66c44481 (patch) | |
| tree | 7665ced91286df40215dfb43e05774c2dbf96ace /Source/Core/DiscIO/CISOBlob.cpp | |
| parent | a3bef102b7f2fd4f41e753509f74355ea7096a33 (diff) | |
| parent | b1873264d7c78ea02de16691d26881eb2c4a47e1 (diff) | |
Merge pull request #4537 from JosJuice/blob-open-less-files
Open less files when detecting/opening blobs
Diffstat (limited to 'Source/Core/DiscIO/CISOBlob.cpp')
| -rw-r--r-- | Source/Core/DiscIO/CISOBlob.cpp | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/Source/Core/DiscIO/CISOBlob.cpp b/Source/Core/DiscIO/CISOBlob.cpp index 37e427793b..846952ce8a 100644 --- a/Source/Core/DiscIO/CISOBlob.cpp +++ b/Source/Core/DiscIO/CISOBlob.cpp @@ -5,6 +5,7 @@ #include <algorithm> #include <cstdio> #include <memory> +#include <utility> #include "Common/CommonTypes.h" #include "Common/FileUtil.h" @@ -12,13 +13,12 @@ namespace DiscIO { -static const char CISO_MAGIC[] = "CISO"; - -CISOFileReader::CISOFileReader(std::FILE* file) : m_file(file) +CISOFileReader::CISOFileReader(File::IOFile file) : m_file(std::move(file)) { m_size = m_file.GetSize(); CISOHeader header; + m_file.Seek(0, SEEK_SET); m_file.ReadArray(&header, 1); m_block_size = header.block_size; @@ -28,13 +28,11 @@ CISOFileReader::CISOFileReader(std::FILE* file) : m_file(file) m_ciso_map[idx] = (1 == header.map[idx]) ? count++ : UNUSED_BLOCK_ID; } -std::unique_ptr<CISOFileReader> CISOFileReader::Create(const std::string& filename) +std::unique_ptr<CISOFileReader> CISOFileReader::Create(File::IOFile file) { - if (IsCISOBlob(filename)) - { - File::IOFile f(filename, "rb"); - return std::unique_ptr<CISOFileReader>(new CISOFileReader(f.ReleaseHandle())); - } + CISOHeader header; + if (file.Seek(0, SEEK_SET) && file.ReadArray(&header, 1) && header.magic == CISO_MAGIC) + return std::unique_ptr<CISOFileReader>(new CISOFileReader(std::move(file))); return nullptr; } @@ -81,13 +79,4 @@ bool CISOFileReader::Read(u64 offset, u64 nbytes, u8* out_ptr) return true; } -bool IsCISOBlob(const std::string& filename) -{ - File::IOFile f(filename, "rb"); - - CISOHeader header; - return (f.ReadArray(&header, 1) && - std::equal(header.magic, header.magic + sizeof(header.magic), CISO_MAGIC)); -} - } // namespace |
