diff --git a/src/core/core.cpp b/src/core/core.cpp index 054af8dc4a..046ee53346 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -312,6 +312,10 @@ struct System::Impl { } SystemResultStatus Load(System& system, Frontend::EmuWindow& emu_window, const std::string& filepath, Service::AM::FrontendAppletParameters& params) { + if (params.launch_type == Service::AM::LaunchType::FrontendInitiated) { + fs_controller.InitTempStorage(); + } + InitializeKernel(system); if (params.applet_type == Service::AM::AppletType::Application) { diff --git a/src/core/file_sys/savedata_factory.cpp b/src/core/file_sys/savedata_factory.cpp index 0ba839ec14..c756734a43 100644 --- a/src/core/file_sys/savedata_factory.cpp +++ b/src/core/file_sys/savedata_factory.cpp @@ -57,11 +57,7 @@ std::string GetFutureSaveDataPath(SaveDataSpaceId space_id, SaveDataType type, u SaveDataFactory::SaveDataFactory(Core::System& system_, ProgramId program_id_, VirtualDir save_directory_) - : system{system_}, program_id{program_id_}, dir{std::move(save_directory_)} { - // Delete all temporary storages - // On hardware, it is expected that temporary storage be empty at first use. - dir->DeleteSubdirectoryRecursive("temp"); -} + : system{system_}, program_id{program_id_}, dir{std::move(save_directory_)} {} SaveDataFactory::~SaveDataFactory() = default; diff --git a/src/core/hle/service/filesystem/filesystem.cpp b/src/core/hle/service/filesystem/filesystem.cpp index 306e8701c3..38d2f1735c 100644 --- a/src/core/hle/service/filesystem/filesystem.cpp +++ b/src/core/hle/service/filesystem/filesystem.cpp @@ -787,6 +787,13 @@ void FileSystemController::CreateFactories(FileSys::VfsFilesystem& vfs, bool ove } } +void FileSystemController::InitTempStorage() { + const auto save_directory = system.GetFilesystem()->OpenDirectory(Common::FS::GetEdenPathString(Common::FS::EdenPath::SaveDir), FileSys::OpenMode::ReadWrite); + if (save_directory != nullptr) { + save_directory->DeleteSubdirectoryRecursive("temp"); + } +} + void FileSystemController::Reset() { std::scoped_lock lk{registration_lock}; registrations.clear(); diff --git a/src/core/hle/service/filesystem/filesystem.h b/src/core/hle/service/filesystem/filesystem.h index ef45aec627..a77358e2ef 100644 --- a/src/core/hle/service/filesystem/filesystem.h +++ b/src/core/hle/service/filesystem/filesystem.h @@ -127,6 +127,8 @@ public: // above is called. void CreateFactories(FileSys::VfsFilesystem& vfs, bool overwrite = true); + void InitTempStorage(); + void Reset(); private: