Protect dvdread with a critical section, should fix crashes when running ikaruga from a compressed iso. Some coding standard stuff.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@672 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
hrydgard
2008-09-24 20:47:11 +00:00
parent 3883ce6ee9
commit 08e81eddb9
6 changed files with 116 additions and 165 deletions

View File

@ -26,55 +26,37 @@ CVolumeGC::CVolumeGC(IBlobReader* _pReader)
: m_pReader(_pReader)
{}
CVolumeGC::~CVolumeGC()
{
delete m_pReader;
}
bool
CVolumeGC::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const
bool CVolumeGC::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const
{
if (m_pReader == NULL)
{
return(false);
}
return(m_pReader->Read(_Offset, _Length, _pBuffer));
return false;
return m_pReader->Read(_Offset, _Length, _pBuffer);
}
std::string
CVolumeGC::GetName() const
std::string CVolumeGC::GetName() const
{
if (m_pReader == NULL)
{
return(false);
}
return false;
char Name[128];
if (!Read(0x20, 0x60, (u8*)&Name))
{
return(false);
}
return false;
return(Name);
return Name;
}
std::string
CVolumeGC::GetUniqueID() const
std::string CVolumeGC::GetUniqueID() const
{
static const std::string NO_UID("NO_UID");
if (m_pReader == NULL)
{
return NO_UID;
}
char id[6];
if (!Read(0, sizeof(id), reinterpret_cast<u8*>(id)))
{
PanicAlert("Failed to read unique ID from disc image");
@ -84,14 +66,10 @@ CVolumeGC::GetUniqueID() const
return std::string(id, sizeof(id));
}
IVolume::ECountry
CVolumeGC::GetCountry() const
IVolume::ECountry CVolumeGC::GetCountry() const
{
if (!m_pReader)
{
return(COUNTRY_UNKNOWN);
}
return COUNTRY_UNKNOWN;
u8 CountryCode;
m_pReader->Read(3, 1, &CountryCode);
@ -141,17 +119,12 @@ CVolumeGC::GetCountry() const
return(country);
}
u64
CVolumeGC::GetSize() const
u64 CVolumeGC::GetSize() const
{
if (m_pReader)
{
return((size_t)m_pReader->GetDataSize());
}
return (size_t)m_pReader->GetDataSize();
else
{
return(0);
}
return 0;
}
} // namespace

View File

@ -20,35 +20,23 @@
#include "Volume.h"
#include "Blob.h"
//
// --- this volume type is used for GC and for decrypted Wii images ---
//
// --- this volume type is used for GC disc images ---
namespace DiscIO
{
class CVolumeGC
: public IVolume
class CVolumeGC : public IVolume
{
public:
public:
CVolumeGC(IBlobReader* _pReader);
~CVolumeGC();
bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const;
std::string GetName() const;
std::string GetUniqueID() const;
ECountry GetCountry() const;
u64 GetSize() const;
CVolumeGC(IBlobReader* _pReader);
~CVolumeGC();
bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const;
std::string GetName() const;
std::string GetUniqueID() const;
ECountry GetCountry() const;
u64 GetSize() const;
private:
IBlobReader* m_pReader;
private:
IBlobReader* m_pReader;
};
} // namespace
} // namespace

View File

@ -22,43 +22,33 @@
#include "Blob.h"
#include "AES/aes.h"
//
// --- this volume type is used for encrypted Wii images ---
//
namespace DiscIO
{
class CVolumeWiiCrypted
: public IVolume
class CVolumeWiiCrypted : public IVolume
{
public:
public:
CVolumeWiiCrypted(IBlobReader* _pReader, u64 _VolumeOffset, const unsigned char* _pVolumeKey);
~CVolumeWiiCrypted();
bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const;
std::string GetName() const;
std::string GetUniqueID() const;
ECountry GetCountry() const;
u64 GetSize() const;
CVolumeWiiCrypted(IBlobReader* _pReader, u64 _VolumeOffset, const unsigned char* _pVolumeKey);
private:
IBlobReader* m_pReader;
~CVolumeWiiCrypted();
u8* m_pBuffer;
AES_KEY m_AES_KEY;
bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const;
u64 m_VolumeOffset;
std::string GetName() const;
std::string GetUniqueID() const;
ECountry GetCountry() const;
u64 GetSize() const;
private:
IBlobReader* m_pReader;
u8* m_pBuffer;
AES_KEY m_AES_KEY;
u64 m_VolumeOffset;
mutable u64 m_LastDecryptedBlockOffset;
mutable unsigned char m_LastDecryptedBlock[0x8000];
mutable u64 m_LastDecryptedBlockOffset;
mutable unsigned char m_LastDecryptedBlock[0x8000];
};
} // namespace
#endif