diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2025-11-10 17:29:43 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-10 17:29:43 -0600 |
| commit | f51eaf3282416157af1f58f4803c683dcae7e70f (patch) | |
| tree | 1218824f42541a80591317b3b629923b007d111a /Source/Core/DiscIO/DirectoryBlob.cpp | |
| parent | cd4902f0ed68ffac9f1e4ab853f37eefa34e6ae2 (diff) | |
| parent | 9e2fc7f4ddba14b1e7123d1654b385b21c71c744 (diff) | |
Merge pull request #14052 from jordan-woyak/DirectIOFile
Common and DiscIO: Introduce a thread safe DirectIOFile and make BlobReader implementations use it.
Diffstat (limited to 'Source/Core/DiscIO/DirectoryBlob.cpp')
| -rw-r--r-- | Source/Core/DiscIO/DirectoryBlob.cpp | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/Source/Core/DiscIO/DirectoryBlob.cpp b/Source/Core/DiscIO/DirectoryBlob.cpp index d0ee8bf803..11acc8eb41 100644 --- a/Source/Core/DiscIO/DirectoryBlob.cpp +++ b/Source/Core/DiscIO/DirectoryBlob.cpp @@ -4,9 +4,7 @@ #include "DiscIO/DirectoryBlob.h" #include <algorithm> -#include <array> #include <cstring> -#include <locale> #include <map> #include <memory> #include <set> @@ -17,14 +15,12 @@ #include "Common/Align.h" #include "Common/Assert.h" -#include "Common/CommonPaths.h" #include "Common/CommonTypes.h" +#include "Common/DirectIOFile.h" #include "Common/FileUtil.h" -#include "Common/IOFile.h" #include "Common/Logging/Log.h" #include "Common/StringUtil.h" #include "Common/Swap.h" -#include "Core/Boot/DolReader.h" #include "Core/IOS/ES/Formats.h" #include "DiscIO/Blob.h" #include "DiscIO/DiscUtils.h" @@ -97,9 +93,8 @@ bool DiscContent::Read(u64* offset, u64* length, u8** buffer, DirectoryBlobReade if (std::holds_alternative<ContentFile>(m_content_source)) { const auto& content = std::get<ContentFile>(m_content_source); - File::IOFile file(content.m_filename, "rb"); - if (!file.Seek(content.m_offset + offset_in_content, File::SeekOrigin::Begin) || - !file.ReadBytes(*buffer, bytes_to_read)) + File::DirectIOFile file(content.m_filename, File::AccessMode::Read); + if (!file.OffsetRead(content.m_offset + offset_in_content, *buffer, bytes_to_read)) { return false; } @@ -1013,9 +1008,9 @@ void DirectoryBlobPartition::SetBI2(std::vector<u8> bi2) u64 DirectoryBlobPartition::SetApploaderFromFile(const std::string& path) { - File::IOFile file(path, "rb"); + File::DirectIOFile file(path, File::AccessMode::Read); std::vector<u8> apploader(file.GetSize()); - file.ReadBytes(apploader.data(), apploader.size()); + file.Read(apploader); return SetApploader(std::move(apploader), path); } @@ -1256,10 +1251,9 @@ void DirectoryBlobPartition::WriteDirectory(std::vector<u8>* fst_data, static size_t ReadFileToVector(const std::string& path, std::vector<u8>* vector) { - File::IOFile file(path, "rb"); - size_t bytes_read; - file.ReadArray<u8>(vector->data(), std::min<u64>(file.GetSize(), vector->size()), &bytes_read); - return bytes_read; + File::DirectIOFile file(path, File::AccessMode::Read); + file.Read(vector->data(), std::min<u64>(file.GetSize(), vector->size())); + return file.Tell(); } static void PadToAddress(u64 start_address, u64* address, u64* length, u8** buffer) |
