summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/DirectoryBlob.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2025-10-29 20:26:47 -0500
committerJordan Woyak <jordan.woyak@gmail.com>2025-11-09 03:08:14 -0600
commit239330017c97fa3f6b4b2670ab570e822d6affb0 (patch)
treefca744551834dc4788eab4d32bb969073b3a2157 /Source/Core/DiscIO/DirectoryBlob.cpp
parentb98acb9a37a80b22a0da1bee7be0c4c44adadb56 (diff)
DiscIO: Make all BlobReader implementations use DirectIOFile to make CopyReader functionality thread safe.
Diffstat (limited to 'Source/Core/DiscIO/DirectoryBlob.cpp')
-rw-r--r--Source/Core/DiscIO/DirectoryBlob.cpp22
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)