summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2013-01-24 16:58:28 +0100
committerdegasus <wickmarkus@web.de>2013-01-24 16:58:28 +0100
commite0ffdda26e5fb34b2f0d59d5d45b0deda9c90c19 (patch)
tree8e289ea93c97fe7430ae501200b60327f572c7e2 /Source/Core/DiscIO
parentd5748ebaef93cd601ae6ab5e12f39dd201593ad0 (diff)
parentd60cc373d1b389215eb63c4e20fe24e902680c7a (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')
-rw-r--r--Source/Core/DiscIO/Src/CompressedBlob.cpp6
-rw-r--r--Source/Core/DiscIO/Src/FileSystemGCWii.cpp54
-rw-r--r--Source/Core/DiscIO/Src/FileSystemGCWii.h2
-rw-r--r--Source/Core/DiscIO/Src/Filesystem.h2
-rw-r--r--Source/Core/DiscIO/Src/Volume.h1
-rw-r--r--Source/Core/DiscIO/Src/VolumeCommon.cpp4
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