From 1db1a8aacf7c5d0d8a7e36f2c6f2e452b0971ed0 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 31 Aug 2015 19:27:18 -0400 Subject: VolumeCreator: Use a unique_ptr in CreateVolumeFromFilename --- Source/Core/DiscIO/VolumeCreator.cpp | 42 +++++++++++++++--------------------- 1 file changed, 17 insertions(+), 25 deletions(-) (limited to 'Source/Core/DiscIO/VolumeCreator.cpp') diff --git a/Source/Core/DiscIO/VolumeCreator.cpp b/Source/Core/DiscIO/VolumeCreator.cpp index fdcf4f955e..58f5bee187 100644 --- a/Source/Core/DiscIO/VolumeCreator.cpp +++ b/Source/Core/DiscIO/VolumeCreator.cpp @@ -4,7 +4,9 @@ #include #include +#include #include +#include #include #include @@ -69,35 +71,26 @@ static const unsigned char s_master_key_korean[16] = { 0x13,0xf2,0xfe,0xfb,0xba,0x4c,0x9b,0x7e }; -static IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _PartitionGroup, u32 _VolumeType, u32 _VolumeNum); +static IVolume* CreateVolumeFromCryptedWiiImage(std::unique_ptr reader, u32 _PartitionGroup, u32 _VolumeType, u32 _VolumeNum); EDiscType GetDiscType(IBlobReader& _rReader); IVolume* CreateVolumeFromFilename(const std::string& _rFilename, u32 _PartitionGroup, u32 _VolumeNum) { - IBlobReader* pReader = CreateBlobReader(_rFilename); - if (pReader == nullptr) + std::unique_ptr reader(CreateBlobReader(_rFilename)); + if (reader == nullptr) return nullptr; - switch (GetDiscType(*pReader)) + switch (GetDiscType(*reader)) { case DISC_TYPE_WII: case DISC_TYPE_GC: - return new CVolumeGC(pReader); + return new CVolumeGC(std::move(reader)); case DISC_TYPE_WAD: - return new CVolumeWAD(pReader); + return new CVolumeWAD(std::move(reader)); case DISC_TYPE_WII_CONTAINER: - { - IVolume* pVolume = CreateVolumeFromCryptedWiiImage(*pReader, _PartitionGroup, 0, _VolumeNum); - - if (pVolume == nullptr) - { - delete pReader; - } - - return pVolume; - } + return CreateVolumeFromCryptedWiiImage(std::move(reader), _PartitionGroup, 0, _VolumeNum); case DISC_TYPE_UNK: default: @@ -106,7 +99,6 @@ IVolume* CreateVolumeFromFilename(const std::string& _rFilename, u32 _PartitionG Filename += ext; NOTICE_LOG(DISCIO, "%s does not have the Magic word for a gcm, wiidisc or wad file\n" "Set Log Verbosity to Warning and attempt to load the game again to view the values", Filename.c_str()); - delete pReader; } return nullptr; @@ -153,12 +145,12 @@ void VolumeKeyForParition(IBlobReader& _rReader, u64 offset, u8* VolumeKey) aes_crypt_cbc(&AES_ctx, AES_DECRYPT, 16, IV, SubKey, VolumeKey); } -static IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _PartitionGroup, u32 _VolumeType, u32 _VolumeNum) +static IVolume* CreateVolumeFromCryptedWiiImage(std::unique_ptr reader, u32 _PartitionGroup, u32 _VolumeType, u32 _VolumeNum) { - CBlobBigEndianReader Reader(_rReader); + CBlobBigEndianReader big_endian_reader(*reader); - u32 numPartitions = Reader.Read32(0x40000 + (_PartitionGroup * 8)); - u64 PartitionsOffset = (u64)Reader.Read32(0x40000 + (_PartitionGroup * 8) + 4) << 2; + u32 numPartitions = big_endian_reader.Read32(0x40000 + (_PartitionGroup * 8)); + u64 PartitionsOffset = (u64)big_endian_reader.Read32(0x40000 + (_PartitionGroup * 8) + 4) << 2; // Check if we're looking for a valid partition if ((int)_VolumeNum != -1 && _VolumeNum > numPartitions) @@ -184,8 +176,8 @@ static IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _Part for (u32 i = 0; i < numPartitions; i++) { SPartition Partition; - Partition.Offset = ((u64)Reader.Read32(PartitionsOffset + (i * 8) + 0)) << 2; - Partition.Type = Reader.Read32(PartitionsOffset + (i * 8) + 4); + Partition.Offset = ((u64)big_endian_reader.Read32(PartitionsOffset + (i * 8) + 0)) << 2; + Partition.Type = big_endian_reader.Read32(PartitionsOffset + (i * 8) + 4); group.PartitionsVec.push_back(Partition); } } @@ -200,8 +192,8 @@ static IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _Part if ((rPartition.Type == _VolumeType && (int)_VolumeNum == -1) || i == _VolumeNum) { u8 VolumeKey[16]; - VolumeKeyForParition(_rReader, rPartition.Offset, VolumeKey); - return new CVolumeWiiCrypted(&_rReader, rPartition.Offset, VolumeKey); + VolumeKeyForParition(*reader, rPartition.Offset, VolumeKey); + return new CVolumeWiiCrypted(std::move(reader), rPartition.Offset, VolumeKey); } } -- cgit v1.2.3 From 222b33f0a39d9be4f7b4fe96e4b9babbdebeb38f Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 31 Aug 2015 19:30:32 -0400 Subject: VolumeCreator: Fix a typo in VolumeKeyForPartition's name --- Source/Core/DiscIO/VolumeCreator.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Source/Core/DiscIO/VolumeCreator.cpp') diff --git a/Source/Core/DiscIO/VolumeCreator.cpp b/Source/Core/DiscIO/VolumeCreator.cpp index 58f5bee187..22df4a3bee 100644 --- a/Source/Core/DiscIO/VolumeCreator.cpp +++ b/Source/Core/DiscIO/VolumeCreator.cpp @@ -120,7 +120,7 @@ bool IsVolumeWadFile(const IVolume *_rVolume) return (Common::swap32(MagicWord) == 0x00204973 || Common::swap32(MagicWord) == 0x00206962); } -void VolumeKeyForParition(IBlobReader& _rReader, u64 offset, u8* VolumeKey) +void VolumeKeyForPartition(IBlobReader& _rReader, u64 offset, u8* VolumeKey) { CBlobBigEndianReader Reader(_rReader); @@ -192,7 +192,7 @@ static IVolume* CreateVolumeFromCryptedWiiImage(std::unique_ptr rea if ((rPartition.Type == _VolumeType && (int)_VolumeNum == -1) || i == _VolumeNum) { u8 VolumeKey[16]; - VolumeKeyForParition(*reader, rPartition.Offset, VolumeKey); + VolumeKeyForPartition(*reader, rPartition.Offset, VolumeKey); return new CVolumeWiiCrypted(std::move(reader), rPartition.Offset, VolumeKey); } } -- cgit v1.2.3