From 239330017c97fa3f6b4b2670ab570e822d6affb0 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Wed, 29 Oct 2025 20:26:47 -0500 Subject: DiscIO: Make all BlobReader implementations use DirectIOFile to make CopyReader functionality thread safe. --- Source/Core/DiscIO/DirectoryBlob.cpp | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) (limited to 'Source/Core/DiscIO/DirectoryBlob.cpp') 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 -#include #include -#include #include #include #include @@ -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(m_content_source)) { const auto& content = std::get(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 bi2) u64 DirectoryBlobPartition::SetApploaderFromFile(const std::string& path) { - File::IOFile file(path, "rb"); + File::DirectIOFile file(path, File::AccessMode::Read); std::vector 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* fst_data, static size_t ReadFileToVector(const std::string& path, std::vector* vector) { - File::IOFile file(path, "rb"); - size_t bytes_read; - file.ReadArray(vector->data(), std::min(file.GetSize(), vector->size()), &bytes_read); - return bytes_read; + File::DirectIOFile file(path, File::AccessMode::Read); + file.Read(vector->data(), std::min(file.GetSize(), vector->size())); + return file.Tell(); } static void PadToAddress(u64 start_address, u64* address, u64* length, u8** buffer) -- cgit v1.2.3