From 9774b3f640ad571e48040849bfe293917d3daf61 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Thu, 15 Dec 2016 00:53:52 +0000 Subject: [PATCH] WiiSave: Fixes directory issues --- Source/Core/Core/HW/WiiSaveCrypted.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/HW/WiiSaveCrypted.cpp b/Source/Core/Core/HW/WiiSaveCrypted.cpp index fb1298143b..361d0d89ff 100644 --- a/Source/Core/Core/HW/WiiSaveCrypted.cpp +++ b/Source/Core/Core/HW/WiiSaveCrypted.cpp @@ -337,10 +337,11 @@ void CWiiSaveCrypted::ImportWiiSaveFiles() } else { - std::string filename = - Common::EscapeFileName(reinterpret_cast(file_hdr_tmp.name)); + // Allows files in subfolders to be escaped properly (ex: "nocopy/data00") + // Special characters in path components will be escaped such as /../ + std::string file_path = Common::EscapePath(reinterpret_cast(file_hdr_tmp.name)); - std::string file_path_full = m_wii_title_path + filename; + std::string file_path_full = m_wii_title_path + file_path; File::CreateFullPath(file_path_full); if (file_hdr_tmp.type == 1) { @@ -369,6 +370,20 @@ void CWiiSaveCrypted::ImportWiiSaveFiles() raw_save_file.WriteBytes(&file_data[0], file_size); } } + else if (file_hdr_tmp.type == 2) + { + if (!File::Exists(file_path_full)) + { + if (!File::CreateDir(file_path_full)) + ERROR_LOG(CONSOLE, "Failed to create directory %s", file_path_full.c_str()); + } + else if (!File::IsDirectory(file_path_full)) + { + ERROR_LOG(CONSOLE, + "Failed to create directory %s because a file with the same name exists", + file_path_full.c_str()); + } + } } } }