From 14d37e0493730207600bee68b89ba76b19d34002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Mon, 4 Jun 2018 23:31:00 +0200 Subject: [PATCH] WiiSave: Fix the way paths are handled All paths in SaveFile are relative to the title data directory, not absolute. Fixes an accidental regression from 5.0-7988 (PR #7059). --- Source/Core/Core/HW/WiiSave.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Source/Core/Core/HW/WiiSave.cpp b/Source/Core/Core/HW/WiiSave.cpp index cf31ca18c4..67f5340ef8 100644 --- a/Source/Core/Core/HW/WiiSave.cpp +++ b/Source/Core/Core/HW/WiiSave.cpp @@ -122,6 +122,7 @@ public: }; u8 mode, attributes; Type type; + /// File name relative to the title data directory. std::string path; // Only valid for regular (i.e. non-directory) files. Common::Lazy>> data; @@ -220,20 +221,21 @@ public: for (const SaveFile& file : files) { const FS::Modes modes = GetFsMode(file.mode); + const std::string path = m_data_dir + '/' + file.path; if (file.type == SaveFile::Type::File) { - const auto raw_file = m_fs->CreateAndOpenFile(*m_uid, *m_gid, file.path, modes); + const auto raw_file = m_fs->CreateAndOpenFile(*m_uid, *m_gid, path, modes); const std::optional>& data = *file.data; if (!data || !raw_file || !raw_file->Write(data->data(), data->size())) return false; } else if (file.type == SaveFile::Type::Directory) { - const FS::Result meta = m_fs->GetMetadata(*m_uid, *m_gid, file.path); + const FS::Result meta = m_fs->GetMetadata(*m_uid, *m_gid, path); if (!meta || meta->is_file) return false; - const FS::ResultCode result = m_fs->CreateDirectory(*m_uid, *m_gid, file.path, 0, modes); + const FS::ResultCode result = m_fs->CreateDirectory(*m_uid, *m_gid, path, 0, modes); if (result != FS::ResultCode::Success) return false; } @@ -265,7 +267,7 @@ private: save_file.mode = GetBinMode(metadata->modes); save_file.attributes = 0; save_file.type = metadata->is_file ? SaveFile::Type::File : SaveFile::Type::Directory; - save_file.path = path; + save_file.path = path.substr(m_data_dir.size() + 1); save_file.data = [this, path]() -> std::optional> { const auto file = m_fs->OpenFile(*m_uid, *m_gid, path, FS::Mode::Read); if (!file)