Filesystem: Replace file info's full path with name

Some callers (i.e. ISOProperties) don't want the full path, so giving them
it is unnecessary. Those that do want it can use GetPathFromFSTOffset.
Not storing full paths everywhere also saves a small bit of RAM and is
necessary for a later commit. The code isn't especially pretty right now
(callers need to use FST offsets...) but it'll become better later.
This commit is contained in:
JosJuice
2015-07-29 16:42:29 +02:00
parent 5021b4a567
commit 07d3a39aeb
6 changed files with 89 additions and 90 deletions

View File

@ -20,14 +20,15 @@ struct Partition;
class FileInfoGCWii : public FileInfo
{
public:
FileInfoGCWii(u64 name_offset, u64 offset, u64 file_size);
FileInfoGCWii(u64 name_offset, u64 offset, u64 file_size, std::string name);
~FileInfoGCWii() override;
u64 GetOffset() const override { return m_Offset; }
u64 GetSize() const override { return m_FileSize; }
bool IsDirectory() const override { return (m_NameOffset & 0xFF000000) != 0; }
const std::string& GetName() const override { return m_Name; }
// TODO: These shouldn't be public
std::string m_FullPath;
std::string m_Name;
const u64 m_NameOffset = 0u;
private:
@ -43,7 +44,8 @@ public:
bool IsValid() const override { return m_Valid; }
u64 GetFileSize(const std::string& _rFullPath) override;
const std::vector<FileInfoGCWii>& GetFileList() override;
std::string GetFileName(u64 _Address) override;
std::string GetPath(u64 _Address) override;
std::string GetPathFromFSTOffset(size_t file_info_offset) override;
u64 ReadFile(const std::string& _rFullPath, u8* _pBuffer, u64 _MaxBufferSize,
u64 _OffsetInFile) override;
bool ExportFile(const std::string& _rFullPath, const std::string& _rExportFilename) override;
@ -62,8 +64,6 @@ private:
const FileInfoGCWii* FindFileInfo(const std::string& _rFullPath);
bool DetectFileSystem();
void InitFileSystem();
size_t BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex,
const std::string& _szDirectory, u64 _NameTableOffset);
};
} // namespace