FileSystemGCWii: Allow reading files partially

This commit is contained in:
JosJuice 2015-04-28 16:47:03 +02:00
parent ee694e327a
commit 272f9d3cbc
3 changed files with 10 additions and 8 deletions

View File

@ -63,7 +63,7 @@ const std::string CFileSystemGCWii::GetFileName(u64 _Address)
return ""; return "";
} }
u64 CFileSystemGCWii::ReadFile(const std::string& _rFullPath, u8* _pBuffer, size_t _MaxBufferSize) u64 CFileSystemGCWii::ReadFile(const std::string& _rFullPath, u8* _pBuffer, u64 _MaxBufferSize, u64 _OffsetInFile)
{ {
if (!m_Initialized) if (!m_Initialized)
InitFileSystem(); InitFileSystem();
@ -72,14 +72,16 @@ u64 CFileSystemGCWii::ReadFile(const std::string& _rFullPath, u8* _pBuffer, size
if (pFileInfo == nullptr) if (pFileInfo == nullptr)
return 0; return 0;
if (pFileInfo->m_FileSize > _MaxBufferSize) if (_OffsetInFile >= pFileInfo->m_FileSize)
return 0; return 0;
DEBUG_LOG(DISCIO, "Filename: %s. Offset: %" PRIx64 ". Size: %" PRIx64, _rFullPath.c_str(), u64 read_length = std::min(_MaxBufferSize, pFileInfo->m_FileSize - _OffsetInFile);
pFileInfo->m_Offset, pFileInfo->m_FileSize);
m_rVolume->Read(pFileInfo->m_Offset, pFileInfo->m_FileSize, _pBuffer, m_Wii); DEBUG_LOG(DISCIO, "Reading %" PRIx64 " bytes at %" PRIx64 " from file %s. Offset: %" PRIx64 " Size: %" PRIx64,
return pFileInfo->m_FileSize; read_length, _OffsetInFile, _rFullPath.c_str(), pFileInfo->m_Offset, pFileInfo->m_FileSize);
m_rVolume->Read(pFileInfo->m_Offset + _OffsetInFile, read_length, _pBuffer, m_Wii);
return read_length;
} }
bool CFileSystemGCWii::ExportFile(const std::string& _rFullPath, const std::string& _rExportFilename) bool CFileSystemGCWii::ExportFile(const std::string& _rFullPath, const std::string& _rExportFilename)

View File

@ -25,7 +25,7 @@ public:
virtual u64 GetFileSize(const std::string& _rFullPath) override; virtual u64 GetFileSize(const std::string& _rFullPath) override;
virtual size_t GetFileList(std::vector<const SFileInfo *> &_rFilenames) override; virtual size_t GetFileList(std::vector<const SFileInfo *> &_rFilenames) override;
virtual const std::string GetFileName(u64 _Address) override; virtual const std::string GetFileName(u64 _Address) override;
virtual u64 ReadFile(const std::string& _rFullPath, u8* _pBuffer, size_t _MaxBufferSize) override; virtual u64 ReadFile(const std::string& _rFullPath, u8* _pBuffer, u64 _MaxBufferSize, u64 _OffsetInFile) override;
virtual bool ExportFile(const std::string& _rFullPath, const std::string&_rExportFilename) override; virtual bool ExportFile(const std::string& _rFullPath, const std::string&_rExportFilename) override;
virtual bool ExportApploader(const std::string& _rExportFolder) const override; virtual bool ExportApploader(const std::string& _rExportFolder) const override;
virtual bool ExportDOL(const std::string& _rExportFolder) const override; virtual bool ExportDOL(const std::string& _rExportFolder) const override;

View File

@ -45,7 +45,7 @@ public:
virtual bool IsValid() const = 0; virtual bool IsValid() const = 0;
virtual size_t GetFileList(std::vector<const SFileInfo *> &_rFilenames) = 0; virtual size_t GetFileList(std::vector<const SFileInfo *> &_rFilenames) = 0;
virtual u64 GetFileSize(const std::string& _rFullPath) = 0; virtual u64 GetFileSize(const std::string& _rFullPath) = 0;
virtual u64 ReadFile(const std::string& _rFullPath, u8* _pBuffer, size_t _MaxBufferSize) = 0; virtual u64 ReadFile(const std::string& _rFullPath, u8* _pBuffer, u64 _MaxBufferSize, u64 _OffsetInFile = 0) = 0;
virtual bool ExportFile(const std::string& _rFullPath, const std::string& _rExportFilename) = 0; virtual bool ExportFile(const std::string& _rFullPath, const std::string& _rExportFilename) = 0;
virtual bool ExportApploader(const std::string& _rExportFolder) const = 0; virtual bool ExportApploader(const std::string& _rExportFolder) const = 0;
virtual bool ExportDOL(const std::string& _rExportFolder) const = 0; virtual bool ExportDOL(const std::string& _rExportFolder) const = 0;