mirror of
https://github.com/Thealexbarney/LibHac.git
synced 2024-11-14 10:49:41 +01:00
Fix a new SubStorage bug and add NonCopyable attributes
This commit is contained in:
parent
1f14a1c360
commit
f07e515048
7 changed files with 22 additions and 6 deletions
10
src/LibHac/Common/NonCopyableAttribute.cs
Normal file
10
src/LibHac/Common/NonCopyableAttribute.cs
Normal file
|
@ -0,0 +1,10 @@
|
|||
using System;
|
||||
|
||||
namespace LibHac.Common
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Struct)]
|
||||
public sealed class NonCopyableAttribute : System.Attribute { }
|
||||
|
||||
[AttributeUsage(AttributeTargets.Struct)]
|
||||
public sealed class NonCopyableDisposableAttribute : System.Attribute { }
|
||||
}
|
|
@ -4,6 +4,8 @@ using System.Threading;
|
|||
using InlineIL;
|
||||
using LibHac.Diag;
|
||||
|
||||
#pragma warning disable LH0001, LH0002, LH0003, LH0004, LH0005
|
||||
|
||||
namespace LibHac.Common
|
||||
{
|
||||
public static class SharedRefExtensions
|
||||
|
@ -105,6 +107,7 @@ namespace LibHac.Common
|
|||
}
|
||||
}
|
||||
|
||||
[NonCopyableDisposable]
|
||||
public struct SharedRef<T> : IDisposable where T : class, IDisposable
|
||||
{
|
||||
// SharedRef and WeakRef should share a base type, but struct inheritance doesn't exist in C#.
|
||||
|
@ -300,6 +303,7 @@ namespace LibHac.Common
|
|||
}
|
||||
}
|
||||
|
||||
[NonCopyableDisposable]
|
||||
public struct WeakRef<T> : IDisposable where T : class, IDisposable
|
||||
{
|
||||
private T _value;
|
||||
|
|
|
@ -15,6 +15,7 @@ namespace LibHac.Common
|
|||
}
|
||||
}
|
||||
|
||||
[NonCopyableDisposable]
|
||||
public struct UniqueRef<T> : IDisposable where T : class, IDisposable
|
||||
{
|
||||
private T _value;
|
||||
|
|
|
@ -83,6 +83,7 @@ namespace LibHac.Fs
|
|||
/// is normalized before passing it to <see cref="SetShallowBuffer"/>.</para>
|
||||
/// <para>Based on FS 12.1.0 (nnSdk 12.3.1)</para></remarks>
|
||||
[DebuggerDisplay("{" + nameof(ToString) + "(),nq}")]
|
||||
[NonCopyableDisposable]
|
||||
public ref struct Path
|
||||
{
|
||||
/// <summary>
|
||||
|
|
|
@ -107,7 +107,7 @@ namespace LibHac.Fs
|
|||
/// <param name="size">The size of the created SubStorage.</param>
|
||||
public SubStorage(ref SharedRef<IStorage> baseStorage, long offset, long size)
|
||||
{
|
||||
BaseStorage = _sharedBaseStorage.Get;
|
||||
BaseStorage = baseStorage.Get;
|
||||
_offset = offset;
|
||||
_size = size;
|
||||
_isResizable = false;
|
||||
|
|
|
@ -268,7 +268,7 @@ namespace LibHac.FsSrv.Impl
|
|||
var adapter = new FileSystemInterfaceAdapter(ref baseFileSystem, allowAllOperations);
|
||||
using var sharedAdapter = new SharedRef<FileSystemInterfaceAdapter>(adapter);
|
||||
|
||||
adapter._selfReference = new WeakRef<FileSystemInterfaceAdapter>(ref sharedAdapter.Ref());
|
||||
adapter._selfReference.Set(ref sharedAdapter.Ref());
|
||||
|
||||
return SharedRef<IFileSystemSf>.CreateMove(ref sharedAdapter.Ref());
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ namespace LibHac.FsSrv.Impl
|
|||
var adapter = new FileSystemInterfaceAdapter(ref baseFileSystem, flags, allowAllOperations);
|
||||
using var sharedAdapter = new SharedRef<FileSystemInterfaceAdapter>(adapter);
|
||||
|
||||
adapter._selfReference = new WeakRef<FileSystemInterfaceAdapter>(ref sharedAdapter.Ref());
|
||||
adapter._selfReference.Set(ref sharedAdapter.Ref());
|
||||
|
||||
return SharedRef<IFileSystemSf>.CreateMove(ref sharedAdapter.Ref());
|
||||
}
|
||||
|
|
|
@ -455,7 +455,7 @@ namespace LibHac.FsSystem.Save
|
|||
|
||||
public bool IsListStart()
|
||||
{
|
||||
return Prev == int.MinValue;
|
||||
return Prev == unchecked((int)0x80000000);
|
||||
}
|
||||
|
||||
public bool IsListEnd()
|
||||
|
@ -485,12 +485,12 @@ namespace LibHac.FsSystem.Save
|
|||
|
||||
public void MakeListStart()
|
||||
{
|
||||
Prev = int.MinValue;
|
||||
Prev = unchecked((int)0x80000000);
|
||||
}
|
||||
|
||||
public bool IsRangeEntry()
|
||||
{
|
||||
return Prev != int.MinValue && Prev < 0;
|
||||
return Prev != unchecked((int)0x80000000) && Prev < 0;
|
||||
}
|
||||
|
||||
public void MakeRangeEntry()
|
||||
|
|
Loading…
Reference in a new issue