summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/FileSystemGCWii.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DiscIO/FileSystemGCWii.cpp')
-rw-r--r--Source/Core/DiscIO/FileSystemGCWii.cpp53
1 files changed, 32 insertions, 21 deletions
diff --git a/Source/Core/DiscIO/FileSystemGCWii.cpp b/Source/Core/DiscIO/FileSystemGCWii.cpp
index b809047679..32f93f5eb6 100644
--- a/Source/Core/DiscIO/FileSystemGCWii.cpp
+++ b/Source/Core/DiscIO/FileSystemGCWii.cpp
@@ -22,8 +22,17 @@
namespace DiscIO
{
+FileInfoGCWii::FileInfoGCWii(u64 name_offset, u64 offset, u64 file_size)
+ : m_NameOffset(name_offset), m_Offset(offset), m_FileSize(file_size)
+{
+}
+
+FileInfoGCWii::~FileInfoGCWii()
+{
+}
+
FileSystemGCWii::FileSystemGCWii(const Volume* _rVolume, const Partition& partition)
- : FileSystem(_rVolume, partition), m_Initialized(false), m_Valid(false), m_offset_shift(0)
+ : FileSystem(_rVolume, partition), m_Initialized(false), m_Valid(false), m_offset_shift(0)
{
m_Valid = DetectFileSystem();
}
@@ -38,10 +47,10 @@ u64 FileSystemGCWii::GetFileSize(const std::string& _rFullPath)
if (!m_Initialized)
InitFileSystem();
- const FileInfo* pFileInfo = FindFileInfo(_rFullPath);
+ const FileInfoGCWii* pFileInfo = FindFileInfo(_rFullPath);
if (pFileInfo != nullptr && !pFileInfo->IsDirectory())
- return pFileInfo->m_FileSize;
+ return pFileInfo->GetSize();
return 0;
}
@@ -53,7 +62,8 @@ std::string FileSystemGCWii::GetFileName(u64 _Address)
for (auto& fileInfo : m_FileInfoVector)
{
- if ((fileInfo.m_Offset <= _Address) && ((fileInfo.m_Offset + fileInfo.m_FileSize) > _Address))
+ if ((fileInfo.GetOffset() <= _Address) &&
+ ((fileInfo.GetOffset() + fileInfo.GetSize()) > _Address))
{
return fileInfo.m_FullPath;
}
@@ -68,21 +78,21 @@ u64 FileSystemGCWii::ReadFile(const std::string& _rFullPath, u8* _pBuffer, u64 _
if (!m_Initialized)
InitFileSystem();
- const FileInfo* pFileInfo = FindFileInfo(_rFullPath);
+ const FileInfoGCWii* pFileInfo = FindFileInfo(_rFullPath);
if (pFileInfo == nullptr)
return 0;
- if (_OffsetInFile >= pFileInfo->m_FileSize)
+ if (_OffsetInFile >= pFileInfo->GetSize())
return 0;
- u64 read_length = std::min(_MaxBufferSize, pFileInfo->m_FileSize - _OffsetInFile);
+ u64 read_length = std::min(_MaxBufferSize, pFileInfo->GetSize() - _OffsetInFile);
DEBUG_LOG(DISCIO, "Reading %" PRIx64 " bytes at %" PRIx64 " from file %s. Offset: %" PRIx64
" Size: %" PRIx64,
- read_length, _OffsetInFile, _rFullPath.c_str(), pFileInfo->m_Offset,
- pFileInfo->m_FileSize);
+ read_length, _OffsetInFile, _rFullPath.c_str(), pFileInfo->GetOffset(),
+ pFileInfo->GetSize());
- m_rVolume->Read(pFileInfo->m_Offset + _OffsetInFile, read_length, _pBuffer, m_partition);
+ m_rVolume->Read(pFileInfo->GetOffset() + _OffsetInFile, read_length, _pBuffer, m_partition);
return read_length;
}
@@ -91,13 +101,13 @@ bool FileSystemGCWii::ExportFile(const std::string& _rFullPath, const std::strin
if (!m_Initialized)
InitFileSystem();
- const FileInfo* pFileInfo = FindFileInfo(_rFullPath);
+ const FileInfoGCWii* pFileInfo = FindFileInfo(_rFullPath);
if (!pFileInfo)
return false;
- u64 remainingSize = pFileInfo->m_FileSize;
- u64 fileOffset = pFileInfo->m_Offset;
+ u64 remainingSize = pFileInfo->GetSize();
+ u64 fileOffset = pFileInfo->GetOffset();
File::IOFile f(_rExportFilename, "wb");
if (!f)
@@ -225,7 +235,7 @@ std::string FileSystemGCWii::GetStringFromOffset(u64 _Offset) const
return SHIFTJISToUTF8(data);
}
-const std::vector<FileInfo>& FileSystemGCWii::GetFileList()
+const std::vector<FileInfoGCWii>& FileSystemGCWii::GetFileList()
{
if (!m_Initialized)
InitFileSystem();
@@ -233,7 +243,7 @@ const std::vector<FileInfo>& FileSystemGCWii::GetFileList()
return m_FileInfoVector;
}
-const FileInfo* FileSystemGCWii::FindFileInfo(const std::string& _rFullPath)
+const FileInfoGCWii* FileSystemGCWii::FindFileInfo(const std::string& _rFullPath)
{
if (!m_Initialized)
InitFileSystem();
@@ -279,7 +289,8 @@ void FileSystemGCWii::InitFileSystem()
const std::optional<u32> root_size = m_rVolume->ReadSwapped<u32>(FSTOffset + 0x8, m_partition);
if (!root_name_offset || !root_offset || !root_size)
return;
- FileInfo root = {*root_name_offset, static_cast<u64>(*root_offset) << m_offset_shift, *root_size};
+ FileInfoGCWii root(*root_name_offset, static_cast<u64>(*root_offset) << m_offset_shift,
+ *root_size);
if (!root.IsDirectory())
return;
@@ -287,7 +298,7 @@ void FileSystemGCWii::InitFileSystem()
// 12 bytes (the size of a file entry) times 10 * 1024 * 1024 is 120 MiB,
// more than total RAM in a Wii. No file system should use anywhere near that much.
static const u32 ARBITRARY_FILE_SYSTEM_SIZE_LIMIT = 10 * 1024 * 1024;
- if (root.m_FileSize > ARBITRARY_FILE_SYSTEM_SIZE_LIMIT)
+ if (root.GetSize() > ARBITRARY_FILE_SYSTEM_SIZE_LIMIT)
{
// Without this check, Dolphin can crash by trying to allocate too much
// memory when loading the file systems of certain malformed disc images.
@@ -300,8 +311,8 @@ void FileSystemGCWii::InitFileSystem()
PanicAlert("Wtf?");
u64 NameTableOffset = FSTOffset;
- m_FileInfoVector.reserve((size_t)root.m_FileSize);
- for (u32 i = 0; i < root.m_FileSize; i++)
+ m_FileInfoVector.reserve((size_t)root.GetSize());
+ for (u32 i = 0; i < root.GetSize(); i++)
{
const u64 read_offset = FSTOffset + (i * 0xC);
const std::optional<u32> name_offset = m_rVolume->ReadSwapped<u32>(read_offset, m_partition);
@@ -323,7 +334,7 @@ size_t FileSystemGCWii::BuildFilenames(const size_t _FirstIndex, const size_t _L
while (CurrentIndex < _LastIndex)
{
- FileInfo& rFileInfo = m_FileInfoVector[CurrentIndex];
+ FileInfoGCWii& rFileInfo = m_FileInfoVector[CurrentIndex];
u64 const uOffset = _NameTableOffset + (rFileInfo.m_NameOffset & 0xFFFFFF);
std::string const offset_str{GetStringFromOffset(uOffset)};
bool const is_dir = rFileInfo.IsDirectory();
@@ -340,7 +351,7 @@ size_t FileSystemGCWii::BuildFilenames(const size_t _FirstIndex, const size_t _L
}
// check next index
- CurrentIndex = BuildFilenames(CurrentIndex + 1, (size_t)rFileInfo.m_FileSize,
+ CurrentIndex = BuildFilenames(CurrentIndex + 1, (size_t)rFileInfo.GetSize(),
rFileInfo.m_FullPath, _NameTableOffset);
}