dolphin/Source/Core/Core/VolumeHandler.cpp
JosJuice ace060748b Don't read from disk when checking volume type
Should be faster than relying on the OS to cache the magic words.
Also gets rid of the odd recursive call in VolumeDirectory.
2015-01-17 13:21:02 +01:00

88 lines
1.6 KiB
C++

// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
#include "Common/CommonFuncs.h"
#include "Core/VolumeHandler.h"
#include "DiscIO/VolumeCreator.h"
namespace VolumeHandler
{
static DiscIO::IVolume* g_pVolume = nullptr;
DiscIO::IVolume *GetVolume()
{
return g_pVolume;
}
void EjectVolume()
{
if (g_pVolume)
{
// This code looks scary. Can the try/catch stuff be removed?
// This cause a "Unhandled exception ... Access violation
// reading location ..." after you have started and stopped two
// or three games
delete g_pVolume;
g_pVolume = nullptr;
}
}
bool SetVolumeName(const std::string& _rFullPath)
{
if (g_pVolume)
{
delete g_pVolume;
g_pVolume = nullptr;
}
g_pVolume = DiscIO::CreateVolumeFromFilename(_rFullPath);
return (g_pVolume != nullptr);
}
void SetVolumeDirectory(const std::string& _rFullPath, bool _bIsWii, const std::string& _rApploader, const std::string& _rDOL)
{
if (g_pVolume)
{
delete g_pVolume;
g_pVolume = nullptr;
}
g_pVolume = DiscIO::CreateVolumeFromDirectory(_rFullPath, _bIsWii, _rApploader, _rDOL);
}
u32 Read32(u64 _Offset, bool decrypt)
{
if (g_pVolume != nullptr)
{
u32 Temp;
g_pVolume->Read(_Offset, 4, (u8*)&Temp, decrypt);
return Common::swap32(Temp);
}
return 0;
}
bool ReadToPtr(u8* ptr, u64 _dwOffset, u64 _dwLength, bool decrypt)
{
if (g_pVolume != nullptr && ptr)
return g_pVolume->Read(_dwOffset, _dwLength, ptr, decrypt);
return false;
}
bool IsValid()
{
return (g_pVolume != nullptr);
}
bool IsWiiDisc()
{
if (g_pVolume)
return g_pVolume->IsWiiDisc();
return false;
}
} // end of namespace VolumeHandler