Merge pull request #8802 from leoetlino/wiiroot-mii-db
WiiRoot: Fix empty files being created when source is missing
This commit is contained in:
commit
2250fbce0e
|
@ -80,21 +80,21 @@ static void CopySave(FS::FileSystem* source, FS::FileSystem* dest, const u64 tit
|
||||||
static bool CopyNandFile(FS::FileSystem* source_fs, const std::string& source_file,
|
static bool CopyNandFile(FS::FileSystem* source_fs, const std::string& source_file,
|
||||||
FS::FileSystem* dest_fs, const std::string& dest_file)
|
FS::FileSystem* dest_fs, const std::string& dest_file)
|
||||||
{
|
{
|
||||||
const auto last_slash = dest_file.find_last_of('/');
|
|
||||||
if (last_slash != std::string::npos && last_slash > 0)
|
|
||||||
{
|
|
||||||
const std::string dir = dest_file.substr(0, last_slash);
|
|
||||||
dest_fs->CreateFullPath(IOS::PID_KERNEL, IOS::PID_KERNEL, dir + '/', 0,
|
|
||||||
{FS::Mode::ReadWrite, FS::Mode::ReadWrite, FS::Mode::ReadWrite});
|
|
||||||
}
|
|
||||||
|
|
||||||
auto source_handle =
|
auto source_handle =
|
||||||
source_fs->OpenFile(IOS::PID_KERNEL, IOS::PID_KERNEL, source_file, IOS::HLE::FS::Mode::Read);
|
source_fs->OpenFile(IOS::PID_KERNEL, IOS::PID_KERNEL, source_file, IOS::HLE::FS::Mode::Read);
|
||||||
|
// If the source file doesn't exist, there is nothing more to do.
|
||||||
|
// This function must not create an empty file on the destination filesystem.
|
||||||
|
if (!source_handle)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
dest_fs->CreateFullPath(IOS::PID_KERNEL, IOS::PID_KERNEL, dest_file, 0,
|
||||||
|
{FS::Mode::ReadWrite, FS::Mode::ReadWrite, FS::Mode::ReadWrite});
|
||||||
|
|
||||||
auto dest_handle =
|
auto dest_handle =
|
||||||
dest_fs->CreateAndOpenFile(IOS::PID_KERNEL, IOS::PID_KERNEL, source_file,
|
dest_fs->CreateAndOpenFile(IOS::PID_KERNEL, IOS::PID_KERNEL, source_file,
|
||||||
{IOS::HLE::FS::Mode::ReadWrite, IOS::HLE::FS::Mode::ReadWrite,
|
{IOS::HLE::FS::Mode::ReadWrite, IOS::HLE::FS::Mode::ReadWrite,
|
||||||
IOS::HLE::FS::Mode::ReadWrite});
|
IOS::HLE::FS::Mode::ReadWrite});
|
||||||
if (!source_handle || !dest_handle)
|
if (!dest_handle)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
std::vector<u8> buffer(source_handle->GetStatus()->size);
|
std::vector<u8> buffer(source_handle->GetStatus()->size);
|
||||||
|
|
Loading…
Reference in New Issue