Filesystem: Return file list reference instead of modifying argument

This commit is contained in:
JosJuice
2015-04-28 12:48:05 +02:00
parent 79dff19aa0
commit d43a920924
7 changed files with 28 additions and 58 deletions

View File

@ -274,9 +274,6 @@ bool ParsePartitionData(SPartition& _rPartition)
}
else
{
std::vector<const SFileInfo *> Files;
size_t numFiles = filesystem->GetFileList(Files);
// Mark things as used which are not in the filesystem
// Header, Header Information, Apploader
ReadFromVolume(0x2440 + 0x14, 4, _rPartition.Header.ApploaderSize, true);
@ -305,18 +302,14 @@ bool ParsePartitionData(SPartition& _rPartition)
, _rPartition.Header.FSTSize);
// Go through the filesystem and mark entries as used
for (size_t currentFile = 0; currentFile < numFiles; currentFile++)
for (SFileInfo file : filesystem->GetFileList())
{
DEBUG_LOG(DISCIO, "%s", currentFile ? (*Files.at(currentFile)).m_FullPath.c_str() : "/");
DEBUG_LOG(DISCIO, file.m_FullPath.empty() ? "/" : file.m_FullPath.c_str());
// Just 1byte for directory? - it will end up reserving a cluster this way
if ((*Files.at(currentFile)).m_NameOffset & 0x1000000)
MarkAsUsedE(_rPartition.Offset
+ _rPartition.Header.DataOffset
, (*Files.at(currentFile)).m_Offset, 1);
if (file.m_NameOffset & 0x1000000)
MarkAsUsedE(_rPartition.Offset + _rPartition.Header.DataOffset, file.m_Offset, 1);
else
MarkAsUsedE(_rPartition.Offset
+ _rPartition.Header.DataOffset
, (*Files.at(currentFile)).m_Offset, (*Files.at(currentFile)).m_FileSize);
MarkAsUsedE(_rPartition.Offset + _rPartition.Header.DataOffset, file.m_Offset, file.m_FileSize);
}
}

View File

@ -27,7 +27,6 @@ namespace FileMon
static DiscIO::IVolume *OpenISO = nullptr;
static DiscIO::IFileSystem *pFileSystem = nullptr;
static std::vector<const DiscIO::SFileInfo *> DiscFiles;
static std::string ISOFile = "", CurrentFile = "";
static bool FileAccess = true;
@ -73,8 +72,6 @@ void ReadFileSystem(const std::string& filename)
pFileSystem = nullptr;
}
// DiscFiles' pointers are no longer valid after pFileSystem is cleared
DiscFiles.clear();
OpenISO = DiscIO::CreateVolumeFromFilename(filename);
if (!OpenISO)
return;
@ -85,8 +82,6 @@ void ReadFileSystem(const std::string& filename)
if (!pFileSystem)
return;
pFileSystem->GetFileList(DiscFiles);
}
FileAccess = true;
@ -166,9 +161,6 @@ void Close()
pFileSystem = nullptr;
}
// DiscFiles' pointers are no longer valid after pFileSystem is cleared
DiscFiles.clear();
ISOFile = "";
CurrentFile = "";
FileAccess = true;

View File

@ -215,18 +215,12 @@ std::string CFileSystemGCWii::GetStringFromOffset(u64 _Offset) const
return SHIFTJISToUTF8(data);
}
size_t CFileSystemGCWii::GetFileList(std::vector<const SFileInfo *> &_rFilenames)
const std::vector<SFileInfo>& CFileSystemGCWii::GetFileList()
{
if (!m_Initialized)
InitFileSystem();
if (_rFilenames.size())
PanicAlert("GetFileList : input list has contents?");
_rFilenames.clear();
_rFilenames.reserve(m_FileInfoVector.size());
for (auto& fileInfo : m_FileInfoVector)
_rFilenames.push_back(&fileInfo);
return m_FileInfoVector.size();
return m_FileInfoVector;
}
const SFileInfo* CFileSystemGCWii::FindFileInfo(const std::string& _rFullPath)

View File

@ -23,7 +23,7 @@ public:
virtual ~CFileSystemGCWii();
virtual bool IsValid() const override { return m_Valid; }
virtual u64 GetFileSize(const std::string& _rFullPath) override;
virtual size_t GetFileList(std::vector<const SFileInfo *> &_rFilenames) override;
virtual const std::vector<SFileInfo>& GetFileList() override;
virtual const std::string GetFileName(u64 _Address) override;
virtual u64 ReadFile(const std::string& _rFullPath, u8* _pBuffer, size_t _MaxBufferSize) override;
virtual bool ExportFile(const std::string& _rFullPath, const std::string&_rExportFilename) override;

View File

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