mirror of
https://github.com/Thealexbarney/LibHac.git
synced 2024-11-14 10:49:41 +01:00
Flush IVFC storage on savedata commit
This commit is contained in:
parent
5bb46b2b36
commit
300a4335ea
2 changed files with 22 additions and 8 deletions
|
@ -9,7 +9,6 @@ namespace LibHac.IO.Save
|
||||||
public IStorage BaseStorage { get; }
|
public IStorage BaseStorage { get; }
|
||||||
public bool LeaveOpen { get; }
|
public bool LeaveOpen { get; }
|
||||||
|
|
||||||
public HierarchicalIntegrityVerificationStorage IvfcStorage { get; }
|
|
||||||
public SaveDataFileSystemCore SaveDataFileSystemCore { get; }
|
public SaveDataFileSystemCore SaveDataFileSystemCore { get; }
|
||||||
|
|
||||||
public RemapStorage DataRemapStorage { get; }
|
public RemapStorage DataRemapStorage { get; }
|
||||||
|
@ -18,6 +17,9 @@ namespace LibHac.IO.Save
|
||||||
public HierarchicalDuplexStorage DuplexStorage { get; }
|
public HierarchicalDuplexStorage DuplexStorage { get; }
|
||||||
public JournalStorage JournalStorage { get; }
|
public JournalStorage JournalStorage { get; }
|
||||||
|
|
||||||
|
public HierarchicalIntegrityVerificationStorage JournalIvfcStorage { get; }
|
||||||
|
public HierarchicalIntegrityVerificationStorage FatIvfcStorage { get; }
|
||||||
|
|
||||||
private Keyset Keyset { get; }
|
private Keyset Keyset { get; }
|
||||||
|
|
||||||
public SaveDataFileSystem(Keyset keyset, IStorage storage, IntegrityCheckLevel integrityCheckLevel, bool leaveOpen)
|
public SaveDataFileSystem(Keyset keyset, IStorage storage, IntegrityCheckLevel integrityCheckLevel, bool leaveOpen)
|
||||||
|
@ -52,16 +54,17 @@ namespace LibHac.IO.Save
|
||||||
|
|
||||||
JournalStorage = new JournalStorage(journalData, Header.JournalHeader, journalMapInfo, leaveOpen);
|
JournalStorage = new JournalStorage(journalData, Header.JournalHeader, journalMapInfo, leaveOpen);
|
||||||
|
|
||||||
IvfcStorage = InitJournalIvfcStorage(integrityCheckLevel);
|
JournalIvfcStorage = InitJournalIvfcStorage(integrityCheckLevel);
|
||||||
|
|
||||||
IStorage fatStorage = MetaRemapStorage.Slice(layout.FatOffset, layout.FatSize);
|
IStorage fatStorage = MetaRemapStorage.Slice(layout.FatOffset, layout.FatSize);
|
||||||
|
|
||||||
if (Header.Layout.Version >= 0x50000)
|
if (Header.Layout.Version >= 0x50000)
|
||||||
{
|
{
|
||||||
fatStorage = InitFatIvfcStorage(integrityCheckLevel);
|
FatIvfcStorage = InitFatIvfcStorage(integrityCheckLevel);
|
||||||
|
fatStorage = FatIvfcStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveDataFileSystemCore = new SaveDataFileSystemCore(IvfcStorage, fatStorage, Header.SaveHeader);
|
SaveDataFileSystemCore = new SaveDataFileSystemCore(JournalIvfcStorage, fatStorage, Header.SaveHeader);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HierarchicalDuplexStorage InitDuplexStorage(IStorage baseStorage, Header header)
|
private static HierarchicalDuplexStorage InitDuplexStorage(IStorage baseStorage, Header header)
|
||||||
|
@ -172,6 +175,9 @@ namespace LibHac.IO.Save
|
||||||
|
|
||||||
public bool Commit(Keyset keyset)
|
public bool Commit(Keyset keyset)
|
||||||
{
|
{
|
||||||
|
JournalIvfcStorage.Flush();
|
||||||
|
FatIvfcStorage.Flush();
|
||||||
|
|
||||||
Stream headerStream = BaseStorage.AsStream();
|
Stream headerStream = BaseStorage.AsStream();
|
||||||
|
|
||||||
var hashData = new byte[0x3d00];
|
var hashData = new byte[0x3d00];
|
||||||
|
@ -207,10 +213,18 @@ namespace LibHac.IO.Save
|
||||||
|
|
||||||
public Validity Verify(IProgressReport logger = null)
|
public Validity Verify(IProgressReport logger = null)
|
||||||
{
|
{
|
||||||
Validity validity = IvfcStorage.Validate(true, logger);
|
Validity journalValidity = JournalIvfcStorage.Validate(true, logger);
|
||||||
IvfcStorage.SetLevelValidities(Header.Ivfc);
|
JournalIvfcStorage.SetLevelValidities(Header.Ivfc);
|
||||||
|
|
||||||
return validity;
|
if (FatIvfcStorage == null)return journalValidity;
|
||||||
|
|
||||||
|
Validity fatValidity = FatIvfcStorage.Validate(true, logger);
|
||||||
|
FatIvfcStorage.SetLevelValidities(Header.Ivfc);
|
||||||
|
|
||||||
|
if (journalValidity != Validity.Valid) return journalValidity;
|
||||||
|
if (fatValidity != Validity.Valid) return fatValidity;
|
||||||
|
|
||||||
|
return journalValidity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,7 +127,7 @@ namespace LibHac.IO.Save
|
||||||
|
|
||||||
public void Commit()
|
public void Commit()
|
||||||
{
|
{
|
||||||
throw new System.NotImplementedException();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IStorage GetBaseStorage() => BaseStorage.AsReadOnly();
|
public IStorage GetBaseStorage() => BaseStorage.AsReadOnly();
|
||||||
|
|
Loading…
Reference in a new issue