diff options
| author | degasus <wickmarkus@web.de> | 2013-01-24 16:58:28 +0100 |
|---|---|---|
| committer | degasus <wickmarkus@web.de> | 2013-01-24 16:58:28 +0100 |
| commit | e0ffdda26e5fb34b2f0d59d5d45b0deda9c90c19 (patch) | |
| tree | 8e289ea93c97fe7430ae501200b60327f572c7e2 /Source/Core/DiscIO/Src | |
| parent | d5748ebaef93cd601ae6ab5e12f39dd201593ad0 (diff) | |
| parent | d60cc373d1b389215eb63c4e20fe24e902680c7a (diff) | |
Merge branch 'immediate-removal' into GLSL-master
Conflicts:
Source/Core/VideoCommon/Src/PixelShaderGen.cpp
Source/Plugins/Plugin_VideoSoftware/Src/SWRenderer.cpp
immediate-removal is a new created branch seperated from master but reverted the revert of immediate-removal
so we get less conflicts by merging
Diffstat (limited to 'Source/Core/DiscIO/Src')
| -rw-r--r-- | Source/Core/DiscIO/Src/CompressedBlob.cpp | 6 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/FileSystemGCWii.cpp | 54 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/FileSystemGCWii.h | 2 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/Filesystem.h | 2 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/Volume.h | 1 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/VolumeCommon.cpp | 4 |
6 files changed, 43 insertions, 26 deletions
diff --git a/Source/Core/DiscIO/Src/CompressedBlob.cpp b/Source/Core/DiscIO/Src/CompressedBlob.cpp index 1e5077b352..48ce8f10f3 100644 --- a/Source/Core/DiscIO/Src/CompressedBlob.cpp +++ b/Source/Core/DiscIO/Src/CompressedBlob.cpp @@ -296,9 +296,13 @@ bool DecompressBlobToFile(const char* infile, const char* outfile, CompressCB ca } CompressedBlobReader* reader = CompressedBlobReader::Create(infile); - if (!reader) return false; + if (!reader) + return false; File::IOFile f(outfile, "wb"); + if (!f) + return false; + const CompressedBlobHeader &header = reader->GetHeader(); u8* buffer = new u8[header.block_size]; int progress_monitor = max<int>(1, header.num_blocks / 100); diff --git a/Source/Core/DiscIO/Src/FileSystemGCWii.cpp b/Source/Core/DiscIO/Src/FileSystemGCWii.cpp index 8f40ab2f18..47651e2f23 100644 --- a/Source/Core/DiscIO/Src/FileSystemGCWii.cpp +++ b/Source/Core/DiscIO/Src/FileSystemGCWii.cpp @@ -19,6 +19,7 @@ #include "FileUtil.h" #include <string> +#include <vector> #include "FileSystemGCWii.h" #include "StringUtil.h" @@ -95,7 +96,7 @@ bool CFileSystemGCWii::ExportFile(const char* _rFullPath, const char* _rExportFi const SFileInfo* pFileInfo = FindFileInfo(_rFullPath); - if (!pFileInfo || pFileInfo->m_FileSize == 0) + if (!pFileInfo) return false; u64 remainingSize = pFileInfo->m_FileSize; @@ -112,22 +113,17 @@ bool CFileSystemGCWii::ExportFile(const char* _rFullPath, const char* _rExportFi // Limit read size to 128 MB size_t readSize = (size_t)min(remainingSize, (u64)0x08000000); - u8* buffer = new u8[readSize]; + std::vector<u8> buffer(readSize); - result = m_rVolume->Read(fileOffset, readSize, buffer); + result = m_rVolume->Read(fileOffset, readSize, &buffer[0]); if (!result) - { - delete[] buffer; break; - } - f.WriteBytes(buffer, readSize); + f.WriteBytes(&buffer[0], readSize); remainingSize -= readSize; fileOffset += readSize; - - delete[] buffer; } return result; @@ -140,26 +136,24 @@ bool CFileSystemGCWii::ExportApploader(const char* _rExportFolder) const AppSize += 0x20; // + header size DEBUG_LOG(DISCIO,"AppSize -> %x", AppSize); - u8* buffer = new u8[AppSize]; - if (m_rVolume->Read(0x2440, AppSize, buffer)) + std::vector<u8> buffer(AppSize); + if (m_rVolume->Read(0x2440, AppSize, &buffer[0])) { - char exportName[512]; - sprintf(exportName, "%s/apploader.img", _rExportFolder); + std::string exportName(_rExportFolder); + exportName += "/apploader.img"; File::IOFile AppFile(exportName, "wb"); if (AppFile) { - AppFile.WriteBytes(buffer, AppSize); - delete[] buffer; + AppFile.WriteBytes(&buffer[0], AppSize); return true; } } - delete[] buffer; return false; } -bool CFileSystemGCWii::ExportDOL(const char* _rExportFolder) const +u32 CFileSystemGCWii::GetBootDOLSize() const { u32 DolOffset = Read32(0x420) << m_OffsetShift; u32 DolSize = 0, offset = 0, size = 0; @@ -181,22 +175,34 @@ bool CFileSystemGCWii::ExportDOL(const char* _rExportFolder) const if (offset + size > DolSize) DolSize = offset + size; } + return DolSize; +} + +bool CFileSystemGCWii::GetBootDOL(u8* &buffer, u32 DolSize) const +{ + u32 DolOffset = Read32(0x420) << m_OffsetShift; + return m_rVolume->Read(DolOffset, DolSize, buffer); +} - u8* buffer = new u8[DolSize]; - if (m_rVolume->Read(DolOffset, DolSize, buffer)) +bool CFileSystemGCWii::ExportDOL(const char* _rExportFolder) const +{ + u32 DolOffset = Read32(0x420) << m_OffsetShift; + u32 DolSize = GetBootDOLSize(); + + std::vector<u8> buffer(DolSize); + if (m_rVolume->Read(DolOffset, DolSize, &buffer[0])) { - char exportName[512]; - sprintf(exportName, "%s/boot.dol", _rExportFolder); + std::string exportName(_rExportFolder); + exportName += "/boot.dol"; + File::IOFile DolFile(exportName, "wb"); if (DolFile) { - DolFile.WriteBytes(buffer, DolSize); - delete[] buffer; + DolFile.WriteBytes(&buffer[0], DolSize); return true; } } - delete[] buffer; return false; } diff --git a/Source/Core/DiscIO/Src/FileSystemGCWii.h b/Source/Core/DiscIO/Src/FileSystemGCWii.h index 38e5f181f9..0e7d836d75 100644 --- a/Source/Core/DiscIO/Src/FileSystemGCWii.h +++ b/Source/Core/DiscIO/Src/FileSystemGCWii.h @@ -38,6 +38,8 @@ public: virtual bool ExportFile(const char* _rFullPath, const char* _rExportFilename); virtual bool ExportApploader(const char* _rExportFolder) const; virtual bool ExportDOL(const char* _rExportFolder) const; + virtual bool GetBootDOL(u8* &buffer, u32 DolSize) const; + virtual u32 GetBootDOLSize() const; private: bool m_Initialized; diff --git a/Source/Core/DiscIO/Src/Filesystem.h b/Source/Core/DiscIO/Src/Filesystem.h index 71be4293e3..8bc98e6a77 100644 --- a/Source/Core/DiscIO/Src/Filesystem.h +++ b/Source/Core/DiscIO/Src/Filesystem.h @@ -57,6 +57,8 @@ public: virtual bool ExportApploader(const char* _rExportFolder) const = 0; virtual bool ExportDOL(const char* _rExportFolder) const = 0; virtual const char* GetFileName(u64 _Address) = 0; + virtual bool GetBootDOL(u8* &buffer, u32 DolSize) const = 0; + virtual u32 GetBootDOLSize() const = 0; virtual const IVolume *GetVolume() const { return m_rVolume; } protected: diff --git a/Source/Core/DiscIO/Src/Volume.h b/Source/Core/DiscIO/Src/Volume.h index f8a6f13ecb..c90ee4a381 100644 --- a/Source/Core/DiscIO/Src/Volume.h +++ b/Source/Core/DiscIO/Src/Volume.h @@ -56,6 +56,7 @@ public: COUNTRY_TAIWAN, COUNTRY_SDK, COUNTRY_UNKNOWN, + COUNTRY_GERMANY, NUMBER_OF_COUNTRIES }; diff --git a/Source/Core/DiscIO/Src/VolumeCommon.cpp b/Source/Core/DiscIO/Src/VolumeCommon.cpp index f3389aea42..415af2725a 100644 --- a/Source/Core/DiscIO/Src/VolumeCommon.cpp +++ b/Source/Core/DiscIO/Src/VolumeCommon.cpp @@ -28,10 +28,12 @@ IVolume::ECountry CountrySwitch(u8 CountryCode) // PAL case 'D': // German + return IVolume::COUNTRY_GERMANY; + break; + case 'X': // Used by a couple PAL games case 'Y': // German, french - case 'L': // Japanese import to PAL regions case 'M': // Japanese import to PAL regions case 'S': // Spanish-speaking regions |
