summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/DiscScrubber.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DiscIO/DiscScrubber.cpp')
-rw-r--r--Source/Core/DiscIO/DiscScrubber.cpp78
1 files changed, 39 insertions, 39 deletions
diff --git a/Source/Core/DiscIO/DiscScrubber.cpp b/Source/Core/DiscIO/DiscScrubber.cpp
index 836a21041a..52b18e8286 100644
--- a/Source/Core/DiscIO/DiscScrubber.cpp
+++ b/Source/Core/DiscIO/DiscScrubber.cpp
@@ -34,7 +34,7 @@ static int m_BlocksPerCluster;
static bool m_isScrubbing = false;
static std::string m_Filename;
-static IVolume* m_Disc = nullptr;
+static std::unique_ptr<IVolume> s_disc;
struct SPartitionHeader
{
@@ -94,11 +94,11 @@ bool SetupScrub(const std::string& filename, int block_size)
m_BlocksPerCluster = CLUSTER_SIZE / m_BlockSize;
- m_Disc = CreateVolumeFromFilename(filename);
- if (!m_Disc)
+ s_disc = CreateVolumeFromFilename(filename);
+ if (!s_disc)
return false;
- m_FileSize = m_Disc->GetSize();
+ m_FileSize = s_disc->GetSize();
u32 numClusters = (u32)(m_FileSize / CLUSTER_SIZE);
@@ -112,9 +112,9 @@ bool SetupScrub(const std::string& filename, int block_size)
// Fill out table of free blocks
success = ParseDisc();
+
// Done with it; need it closed for the next part
- delete m_Disc;
- m_Disc = nullptr;
+ s_disc.reset();
m_BlockCount = 0;
// Let's not touch the file if we've failed up to here :p
@@ -194,12 +194,12 @@ void MarkAsUsedE(u64 _PartitionDataOffset, u64 _Offset, u64 _Size)
// Helper functions for reading the BE volume
void ReadFromVolume(u64 _Offset, u32& _Buffer, bool _Decrypt)
{
- m_Disc->Read(_Offset, sizeof(u32), (u8*)&_Buffer, _Decrypt);
+ s_disc->Read(_Offset, sizeof(u32), (u8*)&_Buffer, _Decrypt);
_Buffer = Common::swap32(_Buffer);
}
void ReadFromVolume(u64 _Offset, u64& _Buffer, bool _Decrypt)
{
- m_Disc->Read(_Offset, sizeof(u32), (u8*)&_Buffer, _Decrypt);
+ s_disc->Read(_Offset, sizeof(u32), (u8*)&_Buffer, _Decrypt);
_Buffer = Common::swap32((u32)_Buffer);
_Buffer <<= 2;
}
@@ -259,71 +259,71 @@ bool ParseDisc()
}
// Operations dealing with encrypted space are done here - the volume is swapped to allow this
-bool ParsePartitionData(SPartition& _rPartition)
+bool ParsePartitionData(SPartition& partition)
{
- bool ParsedOK = true;
+ bool parsed_ok = true;
// Switch out the main volume temporarily
- IVolume *OldVolume = m_Disc;
+ std::unique_ptr<IVolume> old_volume;
+ s_disc.swap(old_volume);
// Ready some stuff
- m_Disc = CreateVolumeFromFilename(m_Filename, _rPartition.GroupNumber, _rPartition.Number);
- if (m_Disc == nullptr)
+ s_disc = CreateVolumeFromFilename(m_Filename, partition.GroupNumber, partition.Number);
+ if (s_disc == nullptr)
{
ERROR_LOG(DISCIO, "Failed to create volume from file %s", m_Filename.c_str());
- m_Disc = OldVolume;
+ s_disc.swap(old_volume);
return false;
}
- std::unique_ptr<IFileSystem> filesystem(CreateFileSystem(m_Disc));
+ std::unique_ptr<IFileSystem> filesystem(CreateFileSystem(s_disc.get()));
if (!filesystem)
{
- ERROR_LOG(DISCIO, "Failed to create filesystem for group %d partition %u", _rPartition.GroupNumber, _rPartition.Number);
- ParsedOK = false;
+ ERROR_LOG(DISCIO, "Failed to create filesystem for group %d partition %u", partition.GroupNumber, partition.Number);
+ parsed_ok = false;
}
else
{
// Mark things as used which are not in the filesystem
// Header, Header Information, Apploader
- ReadFromVolume(0x2440 + 0x14, _rPartition.Header.ApploaderSize, true);
- ReadFromVolume(0x2440 + 0x18, _rPartition.Header.ApploaderTrailerSize, true);
- MarkAsUsedE(_rPartition.Offset
- + _rPartition.Header.DataOffset
+ ReadFromVolume(0x2440 + 0x14, partition.Header.ApploaderSize, true);
+ ReadFromVolume(0x2440 + 0x18, partition.Header.ApploaderTrailerSize, true);
+ MarkAsUsedE(partition.Offset
+ + partition.Header.DataOffset
, 0
, 0x2440
- + _rPartition.Header.ApploaderSize
- + _rPartition.Header.ApploaderTrailerSize);
+ + partition.Header.ApploaderSize
+ + partition.Header.ApploaderTrailerSize);
// DOL
- ReadFromVolume(0x420, _rPartition.Header.DOLOffset, true);
- _rPartition.Header.DOLSize = filesystem->GetBootDOLSize(_rPartition.Header.DOLOffset);
- MarkAsUsedE(_rPartition.Offset
- + _rPartition.Header.DataOffset
- , _rPartition.Header.DOLOffset
- , _rPartition.Header.DOLSize);
+ ReadFromVolume(0x420, partition.Header.DOLOffset, true);
+ partition.Header.DOLSize = filesystem->GetBootDOLSize(partition.Header.DOLOffset);
+ MarkAsUsedE(partition.Offset
+ + partition.Header.DataOffset
+ , partition.Header.DOLOffset
+ , partition.Header.DOLSize);
// FST
- ReadFromVolume(0x424, _rPartition.Header.FSTOffset, true);
- ReadFromVolume(0x428, _rPartition.Header.FSTSize, true);
- MarkAsUsedE(_rPartition.Offset
- + _rPartition.Header.DataOffset
- , _rPartition.Header.FSTOffset
- , _rPartition.Header.FSTSize);
+ ReadFromVolume(0x424, partition.Header.FSTOffset, true);
+ ReadFromVolume(0x428, partition.Header.FSTSize, true);
+ MarkAsUsedE(partition.Offset
+ + partition.Header.DataOffset
+ , partition.Header.FSTOffset
+ , partition.Header.FSTSize);
// Go through the filesystem and mark entries as used
for (SFileInfo file : filesystem->GetFileList())
{
DEBUG_LOG(DISCIO, "%s", file.m_FullPath.empty() ? "/" : file.m_FullPath.c_str());
if ((file.m_NameOffset & 0x1000000) == 0)
- MarkAsUsedE(_rPartition.Offset + _rPartition.Header.DataOffset, file.m_Offset, file.m_FileSize);
+ MarkAsUsedE(partition.Offset + partition.Header.DataOffset, file.m_Offset, file.m_FileSize);
}
}
// Swap back
- delete m_Disc;
- m_Disc = OldVolume;
+ s_disc.swap(old_volume);
- return ParsedOK;
+ return parsed_ok;
}
} // namespace DiscScrubber