Browse Source

Try to ensure save data always has a valid owner ID (#3057)

- Run the extra data fix in FixExtraData on non-system saves that have no owner ID.
- Set the owner ID in the dummy application control property if an application doesn't have a proper one available.
Alex Barney 4 years ago
parent
commit
d317cfd639

+ 3 - 1
Ryujinx.HLE/FileSystem/VirtualFileSystem.cs

@@ -505,7 +505,9 @@ namespace Ryujinx.HLE.FileSystem
 
 
             bool canFixBySaveDataId = extraData.Attribute.StaticSaveDataId == 0 && info.StaticSaveDataId != 0;
             bool canFixBySaveDataId = extraData.Attribute.StaticSaveDataId == 0 && info.StaticSaveDataId != 0;
 
 
-            if (!canFixByProgramId && !canFixBySaveDataId)
+            bool hasEmptyOwnerId = extraData.OwnerId == 0 && info.Type != LibHac.Fs.SaveDataType.System;
+
+            if (!canFixByProgramId && !canFixBySaveDataId && !hasEmptyOwnerId)
             {
             {
                 wasFixNeeded = false;
                 wasFixNeeded = false;
                 return Result.Success;
                 return Result.Success;

+ 1 - 0
Ryujinx.HLE/HOS/ApplicationLoader.cs

@@ -776,6 +776,7 @@ namespace Ryujinx.HLE.HOS
                 // The set sizes don't actually matter as long as they're non-zero because we use directory savedata.
                 // The set sizes don't actually matter as long as they're non-zero because we use directory savedata.
                 control.UserAccountSaveDataSize = 0x4000;
                 control.UserAccountSaveDataSize = 0x4000;
                 control.UserAccountSaveDataJournalSize = 0x4000;
                 control.UserAccountSaveDataJournalSize = 0x4000;
+                control.SaveDataOwnerId = applicationId;
 
 
                 Logger.Warning?.Print(LogClass.Application,
                 Logger.Warning?.Print(LogClass.Application,
                     "No control file was found for this game. Using a dummy one instead. This may cause inaccuracies in some games.");
                     "No control file was found for this game. Using a dummy one instead. This may cause inaccuracies in some games.");