summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO
diff options
context:
space:
mode:
authorRyan Houdek <Sonicadvance1@gmail.com>2014-03-23 00:34:26 -0500
committerRyan Houdek <Sonicadvance1@gmail.com>2014-03-23 00:34:26 -0500
commita3e18cd498e6a02dfd615da25e975f110e8cf365 (patch)
tree63d4fabcda7d8d4ddfa1982cc406acf010cb1132 /Source/Core/DiscIO
parentb8f469dedd155f6fd42239cdf22f239037da6fce (diff)
parentbd1ce18f9092f2929929513729e8abee8f60e4a5 (diff)
Merge pull request #171 from lioncash/rarc-cleanup
File tree building cleanup
Diffstat (limited to 'Source/Core/DiscIO')
-rw-r--r--Source/Core/DiscIO/DiscScrubber.cpp2
-rw-r--r--Source/Core/DiscIO/FileHandlerARC.cpp83
-rw-r--r--Source/Core/DiscIO/FileHandlerARC.h4
-rw-r--r--Source/Core/DiscIO/FileMonitor.cpp8
-rw-r--r--Source/Core/DiscIO/FileSystemGCWii.cpp26
-rw-r--r--Source/Core/DiscIO/FileSystemGCWii.h4
-rw-r--r--Source/Core/DiscIO/Filesystem.h16
7 files changed, 59 insertions, 84 deletions
diff --git a/Source/Core/DiscIO/DiscScrubber.cpp b/Source/Core/DiscIO/DiscScrubber.cpp
index b48967d31b..69d98ff046 100644
--- a/Source/Core/DiscIO/DiscScrubber.cpp
+++ b/Source/Core/DiscIO/DiscScrubber.cpp
@@ -317,7 +317,7 @@ bool ParsePartitionData(SPartition& _rPartition)
// Go through the filesystem and mark entries as used
for (size_t currentFile = 0; currentFile < numFiles; currentFile++)
{
- DEBUG_LOG(DISCIO, "%s", currentFile ? (*Files.at(currentFile)).m_FullPath : "/");
+ DEBUG_LOG(DISCIO, "%s", currentFile ? (*Files.at(currentFile)).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
diff --git a/Source/Core/DiscIO/FileHandlerARC.cpp b/Source/Core/DiscIO/FileHandlerARC.cpp
index ee24158053..6215b0a100 100644
--- a/Source/Core/DiscIO/FileHandlerARC.cpp
+++ b/Source/Core/DiscIO/FileHandlerARC.cpp
@@ -9,6 +9,7 @@
#include "Common/Common.h"
#include "Common/FileUtil.h"
+#include "Common/StringUtil.h"
#include "DiscIO/Blob.h"
#include "DiscIO/FileHandlerARC.h"
#include "DiscIO/Filesystem.h"
@@ -69,70 +70,66 @@ CARCFile::~CARCFile()
}
-bool
-CARCFile::IsInitialized()
+bool CARCFile::IsInitialized()
{
- return(m_Initialized);
+ return m_Initialized;
}
-size_t
-CARCFile::GetFileSize(const std::string& _rFullPath)
+size_t CARCFile::GetFileSize(const std::string& _rFullPath)
{
if (!m_Initialized)
{
- return(0);
+ return 0;
}
const SFileInfo* pFileInfo = FindFileInfo(_rFullPath);
if (pFileInfo != nullptr)
{
- return((size_t) pFileInfo->m_FileSize);
+ return (size_t)pFileInfo->m_FileSize;
}
- return(0);
+ return 0;
}
-size_t
-CARCFile::ReadFile(const std::string& _rFullPath, u8* _pBuffer, size_t _MaxBufferSize)
+size_t CARCFile::ReadFile(const std::string& _rFullPath, u8* _pBuffer, size_t _MaxBufferSize)
{
if (!m_Initialized)
{
- return(0);
+ return 0;
}
const SFileInfo* pFileInfo = FindFileInfo(_rFullPath);
if (pFileInfo == nullptr)
{
- return(0);
+ return 0;
}
if (pFileInfo->m_FileSize > _MaxBufferSize)
{
- return(0);
+ return 0;
}
memcpy(_pBuffer, &m_pBuffer[pFileInfo->m_Offset], (size_t)pFileInfo->m_FileSize);
- return((size_t) pFileInfo->m_FileSize);
+ return (size_t) pFileInfo->m_FileSize;
}
-bool
-CARCFile::ExportFile(const std::string& _rFullPath, const std::string& _rExportFilename)
+bool CARCFile::ExportFile(const std::string& _rFullPath, const std::string& _rExportFilename)
{
if (!m_Initialized)
{
- return(false);
+ return false;
}
const SFileInfo* pFileInfo = FindFileInfo(_rFullPath);
if (pFileInfo == nullptr)
{
- return(false);
+ return false;
}
File::IOFile pFile(_rExportFilename, "wb");
@@ -141,15 +138,13 @@ CARCFile::ExportFile(const std::string& _rFullPath, const std::string& _rExportF
}
-bool
-CARCFile::ExportAllFiles(const std::string& _rFullPath)
+bool CARCFile::ExportAllFiles(const std::string& _rFullPath)
{
- return(false);
+ return false;
}
-bool
-CARCFile::ParseBuffer()
+bool CARCFile::ParseBuffer()
{
// check ID
u32 ID = Common::swap32(*(u32*)(m_pBuffer));
@@ -183,15 +178,14 @@ CARCFile::ParseBuffer()
szNameTable += 0xC;
}
- BuildFilenames(1, m_FileInfoVector.size(), nullptr, szNameTable);
+ BuildFilenames(1, m_FileInfoVector.size(), "", szNameTable);
}
- return(true);
+ return true;
}
-size_t
-CARCFile::BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex, const char* _szDirectory, const char* _szNameTable)
+size_t CARCFile::BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex, const std::string& _szDirectory, const char* _szNameTable)
{
size_t CurrentIndex = _FirstIndex;
@@ -203,49 +197,38 @@ CARCFile::BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex, cons
// check next index
if (rFileInfo.IsDirectory())
{
- // this is a directory, build up the new szDirectory
- if (_szDirectory != nullptr)
- {
- sprintf(rFileInfo.m_FullPath, "%s%s/", _szDirectory, &_szNameTable[uOffset]);
- }
+ if (_szDirectory.empty())
+ rFileInfo.m_FullPath += StringFromFormat("%s/", &_szNameTable[uOffset]);
else
- {
- sprintf(rFileInfo.m_FullPath, "%s/", &_szNameTable[uOffset]);
- }
+ rFileInfo.m_FullPath += StringFromFormat("%s%s/", _szDirectory.c_str(), &_szNameTable[uOffset]);
CurrentIndex = BuildFilenames(CurrentIndex + 1, (size_t) rFileInfo.m_FileSize, rFileInfo.m_FullPath, _szNameTable);
}
- else
+ else // This is a filename
{
- // this is a filename
- if (_szDirectory != nullptr)
- {
- sprintf(rFileInfo.m_FullPath, "%s%s", _szDirectory, &_szNameTable[uOffset]);
- }
+ if (_szDirectory.empty())
+ rFileInfo.m_FullPath += StringFromFormat("%s", &_szNameTable[uOffset]);
else
- {
- sprintf(rFileInfo.m_FullPath, "%s", &_szNameTable[uOffset]);
- }
+ rFileInfo.m_FullPath += StringFromFormat("%s%s", _szDirectory.c_str(), &_szNameTable[uOffset]);
CurrentIndex++;
}
}
- return(CurrentIndex);
+ return CurrentIndex;
}
-const SFileInfo*
-CARCFile::FindFileInfo(std::string _rFullPath) const
+const SFileInfo* CARCFile::FindFileInfo(const std::string& _rFullPath) const
{
for (auto& fileInfo : m_FileInfoVector)
{
- if (!strcasecmp(fileInfo.m_FullPath, _rFullPath.c_str()))
+ if (!strcasecmp(fileInfo.m_FullPath.c_str(), _rFullPath.c_str()))
{
- return(&fileInfo);
+ return &fileInfo;
}
}
- return(nullptr);
+ return nullptr;
}
} // namespace
diff --git a/Source/Core/DiscIO/FileHandlerARC.h b/Source/Core/DiscIO/FileHandlerARC.h
index 1fccd5f894..327d81c4b9 100644
--- a/Source/Core/DiscIO/FileHandlerARC.h
+++ b/Source/Core/DiscIO/FileHandlerARC.h
@@ -47,8 +47,8 @@ class CARCFile
bool ParseBuffer();
- size_t BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex, const char* _szDirectory, const char* _szNameTable);
+ size_t BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex, const std::string& _szDirectory, const char* _szNameTable);
- const SFileInfo* FindFileInfo(std::string _rFullPath) const;
+ const SFileInfo* FindFileInfo(const std::string& _rFullPath) const;
};
} // namespace
diff --git a/Source/Core/DiscIO/FileMonitor.cpp b/Source/Core/DiscIO/FileMonitor.cpp
index 34790ff408..d99bd14cd8 100644
--- a/Source/Core/DiscIO/FileMonitor.cpp
+++ b/Source/Core/DiscIO/FileMonitor.cpp
@@ -142,13 +142,9 @@ void FindFilename(u64 offset)
return;
}
- const char *fname = pFileSystem->GetFileName(offset);
+ const std::string filename = pFileSystem->GetFileName(offset);
- // There's something wrong with the paths
- if (!fname || (strlen(fname) == 512))
- return;
-
- CheckFile(fname, pFileSystem->GetFileSize(fname));
+ CheckFile(filename, pFileSystem->GetFileSize(filename));
}
void Close()
diff --git a/Source/Core/DiscIO/FileSystemGCWii.cpp b/Source/Core/DiscIO/FileSystemGCWii.cpp
index 1ecf71d4b5..f9f88e8d02 100644
--- a/Source/Core/DiscIO/FileSystemGCWii.cpp
+++ b/Source/Core/DiscIO/FileSystemGCWii.cpp
@@ -46,7 +46,7 @@ u64 CFileSystemGCWii::GetFileSize(const std::string& _rFullPath)
return 0;
}
-const char* CFileSystemGCWii::GetFileName(u64 _Address)
+const std::string CFileSystemGCWii::GetFileName(u64 _Address)
{
if (!m_Initialized)
InitFileSystem();
@@ -239,7 +239,7 @@ const SFileInfo* CFileSystemGCWii::FindFileInfo(const std::string& _rFullPath)
for (auto& fileInfo : m_FileInfoVector)
{
- if (!strcasecmp(fileInfo.m_FullPath, _rFullPath.c_str()))
+ if (!strcasecmp(fileInfo.m_FullPath.c_str(), _rFullPath.c_str()))
return &fileInfo;
}
@@ -297,13 +297,11 @@ void CFileSystemGCWii::InitFileSystem()
NameTableOffset += 0xC;
}
- BuildFilenames(1, m_FileInfoVector.size(), nullptr, NameTableOffset);
+ BuildFilenames(1, m_FileInfoVector.size(), "", NameTableOffset);
}
}
-// Changed this stuff from C++ string to C strings for speed in debug mode. Doesn't matter in release, but
-// std::string is SLOW in debug mode.
-size_t CFileSystemGCWii::BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex, const char* _szDirectory, u64 _NameTableOffset)
+size_t CFileSystemGCWii::BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex, const std::string& _szDirectory, u64 _NameTableOffset)
{
size_t CurrentIndex = _FirstIndex;
@@ -316,21 +314,19 @@ size_t CFileSystemGCWii::BuildFilenames(const size_t _FirstIndex, const size_t _
// check next index
if (rFileInfo->IsDirectory())
{
- // this is a directory, build up the new szDirectory
- if (_szDirectory != nullptr)
- CharArrayFromFormat(rFileInfo->m_FullPath, "%s%s/", _szDirectory, filename.c_str());
+ if (_szDirectory.empty())
+ rFileInfo->m_FullPath += StringFromFormat("%s/", filename.c_str());
else
- CharArrayFromFormat(rFileInfo->m_FullPath, "%s/", filename.c_str());
+ rFileInfo->m_FullPath += StringFromFormat("%s%s/", _szDirectory.c_str(), filename.c_str());
CurrentIndex = BuildFilenames(CurrentIndex + 1, (size_t) rFileInfo->m_FileSize, rFileInfo->m_FullPath, _NameTableOffset);
}
- else
+ else // This is a filename
{
- // this is a filename
- if (_szDirectory != nullptr)
- CharArrayFromFormat(rFileInfo->m_FullPath, "%s%s", _szDirectory, filename.c_str());
+ if (_szDirectory.empty())
+ rFileInfo->m_FullPath += filename;
else
- CharArrayFromFormat(rFileInfo->m_FullPath, "%s", filename.c_str());
+ rFileInfo->m_FullPath += StringFromFormat("%s%s", _szDirectory.c_str(), filename.c_str());
CurrentIndex++;
}
diff --git a/Source/Core/DiscIO/FileSystemGCWii.h b/Source/Core/DiscIO/FileSystemGCWii.h
index 4ce1e09cbf..a807358b32 100644
--- a/Source/Core/DiscIO/FileSystemGCWii.h
+++ b/Source/Core/DiscIO/FileSystemGCWii.h
@@ -24,7 +24,7 @@ public:
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 char* 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 bool ExportFile(const std::string& _rFullPath, const std::string&_rExportFilename) override;
virtual bool ExportApploader(const std::string& _rExportFolder) const override;
@@ -43,7 +43,7 @@ private:
const SFileInfo* FindFileInfo(const std::string& _rFullPath);
bool DetectFileSystem();
void InitFileSystem();
- size_t BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex, const char* _szDirectory, u64 _NameTableOffset);
+ size_t BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex, const std::string& _szDirectory, u64 _NameTableOffset);
};
} // namespace
diff --git a/Source/Core/DiscIO/Filesystem.h b/Source/Core/DiscIO/Filesystem.h
index 44fa88391b..9145609267 100644
--- a/Source/Core/DiscIO/Filesystem.h
+++ b/Source/Core/DiscIO/Filesystem.h
@@ -22,17 +22,17 @@ struct SFileInfo
u64 m_NameOffset;
u64 m_Offset;
u64 m_FileSize;
- char m_FullPath[512];
+ std::string m_FullPath;
- bool IsDirectory() const { return (m_NameOffset & 0xFF000000) != 0 ? true : false; }
+ bool IsDirectory() const { return (m_NameOffset & 0xFF000000) != 0; }
- SFileInfo() : m_NameOffset(0), m_Offset(0), m_FileSize(0) {
- memset(m_FullPath, 0, sizeof(m_FullPath));
+ SFileInfo() : m_NameOffset(0), m_Offset(0), m_FileSize(0)
+ {
}
- SFileInfo(const SFileInfo &rhs) : m_NameOffset(rhs.m_NameOffset),
- m_Offset(rhs.m_Offset), m_FileSize(rhs.m_FileSize) {
- memcpy(m_FullPath, rhs.m_FullPath, strlen(rhs.m_FullPath) + 1);
+ SFileInfo(const SFileInfo& rhs) : m_NameOffset(rhs.m_NameOffset),
+ m_Offset(rhs.m_Offset), m_FileSize(rhs.m_FileSize), m_FullPath(rhs.m_FullPath)
+ {
}
};
@@ -49,7 +49,7 @@ public:
virtual bool ExportFile(const std::string& _rFullPath, const std::string& _rExportFilename) = 0;
virtual bool ExportApploader(const std::string& _rExportFolder) const = 0;
virtual bool ExportDOL(const std::string& _rExportFolder) const = 0;
- virtual const char* GetFileName(u64 _Address) = 0;
+ virtual const std::string GetFileName(u64 _Address) = 0;
virtual bool GetBootDOL(u8* &buffer, u32 DolSize) const = 0;
virtual u32 GetBootDOLSize() const = 0;