Ensure more FS classes are updated for 13.1.0

- DeviceEventSimulationStorage
- MultiCommitManager
- DirectorySaveDataFileSystem
- SubdirectoryFileSystem
- FsSystem.Utility
This commit is contained in:
Alex Barney 2022-01-19 12:24:28 -07:00
parent 795bcf0960
commit 37b8249a8b
5 changed files with 21 additions and 14 deletions

View file

@ -1,5 +1,6 @@
using System; using System;
using LibHac.Common; using LibHac.Common;
using LibHac.Diag;
using LibHac.Fs; using LibHac.Fs;
namespace LibHac.FsSrv.Impl; namespace LibHac.FsSrv.Impl;
@ -7,16 +8,16 @@ namespace LibHac.FsSrv.Impl;
/// <summary> /// <summary>
/// An <see cref="IStorage"/> for simulating device failures /// An <see cref="IStorage"/> for simulating device failures
/// </summary> /// </summary>
/// <remarks>Based on FS 12.1.0 (nnSdk 12.3.1)</remarks> /// <remarks>Based on FS 13.1.0 (nnSdk 13.4.0)</remarks>
internal class DeviceEventSimulationStorage : IStorage internal class DeviceEventSimulationStorage : IStorage
{ {
private SharedRef<IStorage> _baseStorage; private SharedRef<IStorage> _baseStorage;
private IDeviceEventSimulator _eventSimulator; private IDeviceEventSimulator _deviceEventSimulator;
public DeviceEventSimulationStorage(ref SharedRef<IStorage> baseStorage, IDeviceEventSimulator eventSimulator) public DeviceEventSimulationStorage(ref SharedRef<IStorage> baseStorage, IDeviceEventSimulator deviceEventSimulator)
{ {
_baseStorage = SharedRef<IStorage>.CreateMove(ref baseStorage); _baseStorage = SharedRef<IStorage>.CreateMove(ref baseStorage);
_eventSimulator = eventSimulator; _deviceEventSimulator = deviceEventSimulator;
} }
public override void Dispose() public override void Dispose()
@ -27,7 +28,9 @@ internal class DeviceEventSimulationStorage : IStorage
public override Result Read(long offset, Span<byte> destination) public override Result Read(long offset, Span<byte> destination)
{ {
Result rc = _eventSimulator.CheckSimulatedAccessFailureEvent(SimulatingDeviceTargetOperation.Read); Assert.SdkNotNull(_deviceEventSimulator);
Result rc = _deviceEventSimulator.CheckSimulatedAccessFailureEvent(SimulatingDeviceTargetOperation.Read);
if (rc.IsFailure()) return rc; if (rc.IsFailure()) return rc;
return _baseStorage.Get.Read(offset, destination); return _baseStorage.Get.Read(offset, destination);
@ -35,7 +38,9 @@ internal class DeviceEventSimulationStorage : IStorage
public override Result Write(long offset, ReadOnlySpan<byte> source) public override Result Write(long offset, ReadOnlySpan<byte> source)
{ {
Result rc = _eventSimulator.CheckSimulatedAccessFailureEvent(SimulatingDeviceTargetOperation.Write); Assert.SdkNotNull(_deviceEventSimulator);
Result rc = _deviceEventSimulator.CheckSimulatedAccessFailureEvent(SimulatingDeviceTargetOperation.Write);
if (rc.IsFailure()) return rc; if (rc.IsFailure()) return rc;
return _baseStorage.Get.Write(offset, source); return _baseStorage.Get.Write(offset, source);

View file

@ -20,7 +20,7 @@ internal struct MultiCommitManagerGlobals
public void Initialize() public void Initialize()
{ {
MultiCommitMutex.Initialize(); MultiCommitMutex = new SdkMutexType();
} }
} }
@ -40,7 +40,7 @@ internal struct MultiCommitManagerGlobals
/// Save data image files are designed so that minimal changes are made when fully committing a provisionally committed save. /// Save data image files are designed so that minimal changes are made when fully committing a provisionally committed save.
/// However if any commit fails for any reason, all other saves in the multi-commit will still be committed. /// However if any commit fails for any reason, all other saves in the multi-commit will still be committed.
/// This can especially cause issues with directory save data where finishing a commit is much more involved. /// This can especially cause issues with directory save data where finishing a commit is much more involved.
/// <para>Based on FS 12.1.0 (nnSdk 12.3.1)</para> /// <para>Based on FS 13.1.0 (nnSdk 13.4.0)</para>
/// </remarks> /// </remarks>
internal class MultiCommitManager : IMultiCommitManager internal class MultiCommitManager : IMultiCommitManager
{ {
@ -501,7 +501,9 @@ internal class MultiCommitManager : IMultiCommitManager
{ {
public int Version; public int Version;
public CommitState State; public CommitState State;
// ReSharper disable once NotAccessedField.Local
public int FileSystemCount; public int FileSystemCount;
// ReSharper disable once NotAccessedField.Local
public long Counter; public long Counter;
} }

View file

@ -25,7 +25,7 @@ internal struct DirectorySaveDataFileSystemGlobals
/// <remarks> /// <remarks>
/// Transactional commits should be atomic as long as the <see cref="IFileSystem.RenameDirectory"/> function of the /// Transactional commits should be atomic as long as the <see cref="IFileSystem.RenameDirectory"/> function of the
/// underlying <see cref="IFileSystem"/> is atomic. /// underlying <see cref="IFileSystem"/> is atomic.
/// <para>Based on FS 12.1.0 (nnSdk 12.3.1)</para> /// <para>Based on FS 13.1.0 (nnSdk 13.4.0)</para>
/// </remarks> /// </remarks>
public class DirectorySaveDataFileSystem : IFileSystem, ISaveDataExtraDataAccessor public class DirectorySaveDataFileSystem : IFileSystem, ISaveDataExtraDataAccessor
{ {
@ -1008,4 +1008,4 @@ public class DirectorySaveDataFileSystem : IFileSystem, ISaveDataExtraDataAccess
public SaveDataSpaceId GetSaveDataSpaceId() => _spaceId; public SaveDataSpaceId GetSaveDataSpaceId() => _spaceId;
public ulong GetSaveDataId() => _saveDataId; public ulong GetSaveDataId() => _saveDataId;
} }

View file

@ -8,7 +8,7 @@ namespace LibHac.FsSystem;
/// <summary> /// <summary>
/// An <see cref="IFileSystem"/> that uses a directory of another <see cref="IFileSystem"/> as its root directory. /// An <see cref="IFileSystem"/> that uses a directory of another <see cref="IFileSystem"/> as its root directory.
/// </summary> /// </summary>
/// <remarks>Based on FS 12.1.0 (nnSdk 12.3.1)</remarks> /// <remarks>Based on FS 13.1.0 (nnSdk 13.4.0)</remarks>
public class SubdirectoryFileSystem : IFileSystem public class SubdirectoryFileSystem : IFileSystem
{ {
private IFileSystem _baseFileSystem; private IFileSystem _baseFileSystem;
@ -255,4 +255,4 @@ public class SubdirectoryFileSystem : IFileSystem
{ {
return _baseFileSystem.Rollback(); return _baseFileSystem.Rollback();
} }
} }

View file

@ -9,7 +9,7 @@ namespace LibHac.FsSystem;
/// <summary> /// <summary>
/// Various utility functions used by the <see cref="LibHac.FsSystem"/> namespace. /// Various utility functions used by the <see cref="LibHac.FsSystem"/> namespace.
/// </summary> /// </summary>
/// <remarks>Based on FS 12.1.0 (nnSdk 12.3.1)</remarks> /// <remarks>Based on FS 13.1.0 (nnSdk 13.4.0)</remarks>
internal static class Utility internal static class Utility
{ {
public delegate Result FsIterationTask(in Path path, in DirectoryEntry entry, ref FsIterationTaskClosure closure); public delegate Result FsIterationTask(in Path path, in DirectoryEntry entry, ref FsIterationTaskClosure closure);
@ -172,7 +172,7 @@ internal static class Utility
rc = destFileSystem.OpenFile(ref destFile.Ref(), in destPath, OpenMode.Write); rc = destFileSystem.OpenFile(ref destFile.Ref(), in destPath, OpenMode.Write);
if (rc.IsFailure()) return rc; if (rc.IsFailure()) return rc;
// Read/Write file in work buffer sized chunks. // Read/Write file in work-buffer-sized chunks.
long remaining = fileSize; long remaining = fileSize;
long offset = 0; long offset = 0;