summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZach Hilman <zachhilman@gmail.com>2019-10-22 21:47:31 +0200
committerZach Hilman <zachhilman@gmail.com>2019-10-22 21:47:38 +0200
commitbb207fe27adcaa0d4c00b1962a519195ff4fc200 (patch)
tree1c1c24752586b2ad54b471b1220cef420f383558
parentMerge pull request #3001 from bunnei/fix-clang-error (diff)
downloadyuzu-bb207fe27adcaa0d4c00b1962a519195ff4fc200.tar
yuzu-bb207fe27adcaa0d4c00b1962a519195ff4fc200.tar.gz
yuzu-bb207fe27adcaa0d4c00b1962a519195ff4fc200.tar.bz2
yuzu-bb207fe27adcaa0d4c00b1962a519195ff4fc200.tar.lz
yuzu-bb207fe27adcaa0d4c00b1962a519195ff4fc200.tar.xz
yuzu-bb207fe27adcaa0d4c00b1962a519195ff4fc200.tar.zst
yuzu-bb207fe27adcaa0d4c00b1962a519195ff4fc200.zip
-rw-r--r--src/core/file_sys/savedata_factory.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/core/file_sys/savedata_factory.cpp b/src/core/file_sys/savedata_factory.cpp
index fc8755c78..e2a7eaf7b 100644
--- a/src/core/file_sys/savedata_factory.cpp
+++ b/src/core/file_sys/savedata_factory.cpp
@@ -16,6 +16,7 @@ namespace FileSys {
constexpr char SAVE_DATA_SIZE_FILENAME[] = ".yuzu_save_size";
namespace {
+
void PrintSaveDataDescriptorWarnings(SaveDataDescriptor meta) {
if (meta.type == SaveDataType::SystemSaveData || meta.type == SaveDataType::SaveData) {
if (meta.zero_1 != 0) {
@@ -52,6 +53,13 @@ void PrintSaveDataDescriptorWarnings(SaveDataDescriptor meta) {
meta.user_id[1], meta.user_id[0]);
}
}
+
+bool ShouldSaveDataBeAutomaticallyCreated(SaveDataSpaceId space, const SaveDataDescriptor& desc) {
+ return desc.type == SaveDataType::CacheStorage || desc.type == SaveDataType::TemporaryStorage ||
+ (space == SaveDataSpaceId::NandUser && ///< Normal Save Data -- Current Title & User
+ desc.type == SaveDataType::SaveData && desc.title_id == 0 && desc.save_id == 0);
+}
+
} // Anonymous namespace
std::string SaveDataDescriptor::DebugInfo() const {
@@ -96,6 +104,10 @@ ResultVal<VirtualDir> SaveDataFactory::Open(SaveDataSpaceId space,
auto out = dir->GetDirectoryRelative(save_directory);
+ if (out == nullptr && ShouldSaveDataBeAutomaticallyCreated(space, meta)) {
+ return Create(space, meta);
+ }
+
// Return an error if the save data doesn't actually exist.
if (out == nullptr) {
// TODO(Subv): Find out correct error code.