diff options
Diffstat (limited to 'Source/Core/Common/NandPaths.cpp')
| -rw-r--r-- | Source/Core/Common/NandPaths.cpp | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/Source/Core/Common/NandPaths.cpp b/Source/Core/Common/NandPaths.cpp index c695d0744a..6037137410 100644 --- a/Source/Core/Common/NandPaths.cpp +++ b/Source/Core/Common/NandPaths.cpp @@ -7,6 +7,7 @@ #include <string> #include <utility> +#include "Common/CommonPaths.h" #include "Common/CommonTypes.h" #include "Common/FileUtil.h" #include "Common/NandPaths.h" @@ -15,17 +16,55 @@ namespace Common { +static std::string s_temp_wii_root; + +void InitializeWiiRoot(bool use_dummy) +{ + ShutdownWiiRoot(); + if (use_dummy) + { + s_temp_wii_root = File::CreateTempDir(); + if (s_temp_wii_root.empty()) + { + ERROR_LOG(WII_IPC_FILEIO, "Could not create temporary directory"); + return; + } + File::CopyDir(File::GetSysDirectory() + WII_USER_DIR, s_temp_wii_root); + WARN_LOG(WII_IPC_FILEIO, "Using temporary directory %s for minimal Wii FS", s_temp_wii_root.c_str()); + static bool s_registered; + if (!s_registered) + { + s_registered = true; + atexit(ShutdownWiiRoot); + } + File::SetUserPath(D_SESSION_WIIROOT_IDX, s_temp_wii_root); + } + else + { + File::SetUserPath(D_SESSION_WIIROOT_IDX, File::GetUserPath(D_WIIROOT_IDX)); + } +} + +void ShutdownWiiRoot() +{ + if (!s_temp_wii_root.empty()) + { + File::DeleteDirRecursively(s_temp_wii_root); + s_temp_wii_root.clear(); + } +} + std::string GetTicketFileName(u64 _titleID) { - return StringFromFormat("%sticket/%08x/%08x.tik", - File::GetUserPath(D_WIIUSER_IDX).c_str(), + return StringFromFormat("%s/ticket/%08x/%08x.tik", + File::GetUserPath(D_SESSION_WIIROOT_IDX).c_str(), (u32)(_titleID >> 32), (u32)_titleID); } std::string GetTitleDataPath(u64 _titleID) { - return StringFromFormat("%stitle/%08x/%08x/data/", - File::GetUserPath(D_WIIUSER_IDX).c_str(), + return StringFromFormat("%s/title/%08x/%08x/data/", + File::GetUserPath(D_SESSION_WIIROOT_IDX).c_str(), (u32)(_titleID >> 32), (u32)_titleID); } @@ -35,8 +74,8 @@ std::string GetTMDFileName(u64 _titleID) } std::string GetTitleContentPath(u64 _titleID) { - return StringFromFormat("%stitle/%08x/%08x/content/", - File::GetUserPath(D_WIIUSER_IDX).c_str(), + return StringFromFormat("%s/title/%08x/%08x/content/", + File::GetUserPath(D_SESSION_WIIROOT_IDX).c_str(), (u32)(_titleID >> 32), (u32)_titleID); } @@ -89,8 +128,7 @@ void ReadReplacements(replace_v& replacements) { replacements.clear(); const std::string replace_fname = "/sys/replace"; - std::string filename(File::GetUserPath(D_WIIROOT_IDX)); - filename += replace_fname; + std::string filename = File::GetUserPath(D_SESSION_WIIROOT_IDX) + replace_fname; if (!File::Exists(filename)) CreateReplacementFile(filename); |
