diff options
Diffstat (limited to 'Source/Core/DiscIO')
| -rw-r--r-- | Source/Core/DiscIO/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | Source/Core/DiscIO/DiscIO.vcxproj | 2 | ||||
| -rw-r--r-- | Source/Core/DiscIO/DiscIO.vcxproj.filters | 6 | ||||
| -rw-r--r-- | Source/Core/DiscIO/DiscScrubber.cpp | 1 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Volume.cpp | 51 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Volume.h | 6 | ||||
| -rw-r--r-- | Source/Core/DiscIO/VolumeCreator.cpp | 69 | ||||
| -rw-r--r-- | Source/Core/DiscIO/VolumeCreator.h | 19 | ||||
| -rw-r--r-- | Source/Core/DiscIO/VolumeWiiCrypted.cpp | 1 |
9 files changed, 57 insertions, 99 deletions
diff --git a/Source/Core/DiscIO/CMakeLists.txt b/Source/Core/DiscIO/CMakeLists.txt index cd3fee7f1d..414cd6a542 100644 --- a/Source/Core/DiscIO/CMakeLists.txt +++ b/Source/Core/DiscIO/CMakeLists.txt @@ -13,7 +13,6 @@ set(SRCS NANDImporter.cpp TGCBlob.cpp Volume.cpp - VolumeCreator.cpp VolumeDirectory.cpp VolumeGC.cpp VolumeWad.cpp diff --git a/Source/Core/DiscIO/DiscIO.vcxproj b/Source/Core/DiscIO/DiscIO.vcxproj index 4846c963ef..f11d3c3e1d 100644 --- a/Source/Core/DiscIO/DiscIO.vcxproj +++ b/Source/Core/DiscIO/DiscIO.vcxproj @@ -48,7 +48,6 @@ <ClCompile Include="NANDImporter.cpp" /> <ClCompile Include="TGCBlob.cpp" /> <ClCompile Include="Volume.cpp" /> - <ClCompile Include="VolumeCreator.cpp" /> <ClCompile Include="VolumeDirectory.cpp" /> <ClCompile Include="VolumeGC.cpp" /> <ClCompile Include="VolumeWad.cpp" /> @@ -70,7 +69,6 @@ <ClInclude Include="NANDImporter.h" /> <ClInclude Include="TGCBlob.h" /> <ClInclude Include="Volume.h" /> - <ClInclude Include="VolumeCreator.h" /> <ClInclude Include="VolumeDirectory.h" /> <ClInclude Include="VolumeGC.h" /> <ClInclude Include="VolumeWad.h" /> diff --git a/Source/Core/DiscIO/DiscIO.vcxproj.filters b/Source/Core/DiscIO/DiscIO.vcxproj.filters index ca6ec54fa7..b56078e599 100644 --- a/Source/Core/DiscIO/DiscIO.vcxproj.filters +++ b/Source/Core/DiscIO/DiscIO.vcxproj.filters @@ -54,9 +54,6 @@ <ClCompile Include="WbfsBlob.cpp"> <Filter>Volume\Blob</Filter> </ClCompile> - <ClCompile Include="VolumeCreator.cpp"> - <Filter>Volume</Filter> - </ClCompile> <ClCompile Include="VolumeDirectory.cpp"> <Filter>Volume</Filter> </ClCompile> @@ -119,9 +116,6 @@ <ClInclude Include="Volume.h"> <Filter>Volume</Filter> </ClInclude> - <ClInclude Include="VolumeCreator.h"> - <Filter>Volume</Filter> - </ClInclude> <ClInclude Include="VolumeDirectory.h"> <Filter>Volume</Filter> </ClInclude> diff --git a/Source/Core/DiscIO/DiscScrubber.cpp b/Source/Core/DiscIO/DiscScrubber.cpp index ac3a39f4c6..332ea7c8c4 100644 --- a/Source/Core/DiscIO/DiscScrubber.cpp +++ b/Source/Core/DiscIO/DiscScrubber.cpp @@ -16,7 +16,6 @@ #include "DiscIO/DiscScrubber.h" #include "DiscIO/Filesystem.h" #include "DiscIO/Volume.h" -#include "DiscIO/VolumeCreator.h" namespace DiscIO { diff --git a/Source/Core/DiscIO/Volume.cpp b/Source/Core/DiscIO/Volume.cpp index ade2bd1eab..21fece4484 100644 --- a/Source/Core/DiscIO/Volume.cpp +++ b/Source/Core/DiscIO/Volume.cpp @@ -6,6 +6,7 @@ #include <algorithm> #include <map> +#include <memory> #include <string> #include <utility> #include <vector> @@ -17,7 +18,12 @@ #include "Common/StringUtil.h" #include "Common/Swap.h" +#include "DiscIO/Blob.h" #include "DiscIO/Enums.h" +#include "DiscIO/VolumeDirectory.h" +#include "DiscIO/VolumeGC.h" +#include "DiscIO/VolumeWad.h" +#include "DiscIO/VolumeWiiCrypted.h" namespace DiscIO { @@ -76,4 +82,49 @@ std::map<Language, std::string> IVolume::ReadWiiNames(const std::vector<u8>& dat } return names; } + +std::unique_ptr<IVolume> CreateVolumeFromFilename(const std::string& filename) +{ + std::unique_ptr<IBlobReader> reader(CreateBlobReader(filename)); + if (reader == nullptr) + return nullptr; + CBlobBigEndianReader be_reader(*reader); + + // Check for Wii + u32 wii_magic = 0; + be_reader.ReadSwapped(0x18, &wii_magic); + u32 wii_container_magic = 0; + be_reader.ReadSwapped(0x60, &wii_container_magic); + if (wii_magic == 0x5D1C9EA3 && wii_container_magic != 0) + return std::make_unique<CVolumeGC>(std::move(reader)); + if (wii_magic == 0x5D1C9EA3 && wii_container_magic == 0) + return std::make_unique<CVolumeWiiCrypted>(std::move(reader)); + + // Check for WAD + // 0x206962 for boot2 wads + u32 wad_magic = 0; + be_reader.ReadSwapped(0x02, &wad_magic); + if (wad_magic == 0x00204973 || wad_magic == 0x00206962) + return std::make_unique<CVolumeWAD>(std::move(reader)); + + // Check for GC + u32 gc_magic = 0; + be_reader.ReadSwapped(0x1C, &gc_magic); + if (gc_magic == 0xC2339F3D) + return std::make_unique<CVolumeGC>(std::move(reader)); + + // No known magic words found + return nullptr; } + +std::unique_ptr<IVolume> CreateVolumeFromDirectory(const std::string& directory, bool is_wii, + const std::string& apploader, + const std::string& dol) +{ + if (CVolumeDirectory::IsValidDirectory(directory)) + return std::make_unique<CVolumeDirectory>(directory, is_wii, apploader, dol); + + return nullptr; +} + +} // namespace diff --git a/Source/Core/DiscIO/Volume.h b/Source/Core/DiscIO/Volume.h index d03e168709..1d98d69c46 100644 --- a/Source/Core/DiscIO/Volume.h +++ b/Source/Core/DiscIO/Volume.h @@ -7,6 +7,7 @@ #include <cstring> #include <limits> #include <map> +#include <memory> #include <string> #include <vector> @@ -112,4 +113,9 @@ protected: static const size_t NAMES_TOTAL_BYTES = NAME_BYTES_LENGTH * NUMBER_OF_LANGUAGES; }; +std::unique_ptr<IVolume> CreateVolumeFromFilename(const std::string& filename); +std::unique_ptr<IVolume> CreateVolumeFromDirectory(const std::string& directory, bool is_wii, + const std::string& apploader = "", + const std::string& dol = ""); + } // namespace diff --git a/Source/Core/DiscIO/VolumeCreator.cpp b/Source/Core/DiscIO/VolumeCreator.cpp deleted file mode 100644 index 63046bce95..0000000000 --- a/Source/Core/DiscIO/VolumeCreator.cpp +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// Licensed under GPLv2+ -// Refer to the license.txt file included. - -#include <cstddef> -#include <cstring> -#include <memory> -#include <string> -#include <utility> -#include <vector> - -#include "Common/CommonTypes.h" -#include "Common/Logging/Log.h" -#include "Common/StringUtil.h" -#include "DiscIO/Blob.h" -#include "DiscIO/Volume.h" -#include "DiscIO/VolumeCreator.h" -#include "DiscIO/VolumeDirectory.h" -#include "DiscIO/VolumeGC.h" -#include "DiscIO/VolumeWad.h" -#include "DiscIO/VolumeWiiCrypted.h" - -namespace DiscIO -{ -std::unique_ptr<IVolume> CreateVolumeFromFilename(const std::string& filename) -{ - std::unique_ptr<IBlobReader> reader(CreateBlobReader(filename)); - if (reader == nullptr) - return nullptr; - CBlobBigEndianReader be_reader(*reader); - - // Check for Wii - u32 wii_magic = 0; - be_reader.ReadSwapped(0x18, &wii_magic); - u32 wii_container_magic = 0; - be_reader.ReadSwapped(0x60, &wii_container_magic); - if (wii_magic == 0x5D1C9EA3 && wii_container_magic != 0) - return std::make_unique<CVolumeGC>(std::move(reader)); - if (wii_magic == 0x5D1C9EA3 && wii_container_magic == 0) - return std::make_unique<CVolumeWiiCrypted>(std::move(reader)); - - // Check for WAD - // 0x206962 for boot2 wads - u32 wad_magic = 0; - be_reader.ReadSwapped(0x02, &wad_magic); - if (wad_magic == 0x00204973 || wad_magic == 0x00206962) - return std::make_unique<CVolumeWAD>(std::move(reader)); - - // Check for GC - u32 gc_magic = 0; - be_reader.ReadSwapped(0x1C, &gc_magic); - if (gc_magic == 0xC2339F3D) - return std::make_unique<CVolumeGC>(std::move(reader)); - - // No known magic words found - return nullptr; -} - -std::unique_ptr<IVolume> CreateVolumeFromDirectory(const std::string& directory, bool is_wii, - const std::string& apploader, - const std::string& dol) -{ - if (CVolumeDirectory::IsValidDirectory(directory)) - return std::make_unique<CVolumeDirectory>(directory, is_wii, apploader, dol); - - return nullptr; -} - -} // namespace diff --git a/Source/Core/DiscIO/VolumeCreator.h b/Source/Core/DiscIO/VolumeCreator.h deleted file mode 100644 index 79c08cf1db..0000000000 --- a/Source/Core/DiscIO/VolumeCreator.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// Licensed under GPLv2+ -// Refer to the license.txt file included. - -#pragma once - -#include <memory> -#include <string> - -namespace DiscIO -{ -class IVolume; - -std::unique_ptr<IVolume> CreateVolumeFromFilename(const std::string& filename); -std::unique_ptr<IVolume> CreateVolumeFromDirectory(const std::string& directory, bool is_wii, - const std::string& apploader = "", - const std::string& dol = ""); - -} // namespace diff --git a/Source/Core/DiscIO/VolumeWiiCrypted.cpp b/Source/Core/DiscIO/VolumeWiiCrypted.cpp index 05d34aa126..1572c8493b 100644 --- a/Source/Core/DiscIO/VolumeWiiCrypted.cpp +++ b/Source/Core/DiscIO/VolumeWiiCrypted.cpp @@ -25,7 +25,6 @@ #include "DiscIO/Enums.h" #include "DiscIO/Filesystem.h" #include "DiscIO/Volume.h" -#include "DiscIO/VolumeCreator.h" namespace DiscIO { |
