mirror of
https://github.com/Thealexbarney/LibHac.git
synced 2024-11-14 10:49:41 +01:00
Make GameCardHandle an alias for uint
This commit is contained in:
parent
902e3e1424
commit
81051907a4
9 changed files with 41 additions and 71 deletions
|
@ -1,4 +1,6 @@
|
|||
using System;
|
||||
global using GameCardHandle = System.UInt32;
|
||||
|
||||
using System;
|
||||
using LibHac.Common.FixedArrays;
|
||||
|
||||
namespace LibHac.Fs;
|
||||
|
@ -82,19 +84,3 @@ public struct GameCardErrorReportInfo
|
|||
public uint ReadCountFromAwaken;
|
||||
public Array8<byte> Reserved38;
|
||||
}
|
||||
|
||||
public readonly struct GameCardHandle : IEquatable<GameCardHandle>
|
||||
{
|
||||
public readonly int Value;
|
||||
|
||||
public GameCardHandle(int value)
|
||||
{
|
||||
Value = value;
|
||||
}
|
||||
|
||||
public override bool Equals(object obj) => obj is GameCardHandle handle && Equals(handle);
|
||||
public bool Equals(GameCardHandle other) => Value == other.Value;
|
||||
public override int GetHashCode() => Value.GetHashCode();
|
||||
public static bool operator ==(GameCardHandle left, GameCardHandle right) => left.Equals(right);
|
||||
public static bool operator !=(GameCardHandle left, GameCardHandle right) => !(left == right);
|
||||
}
|
|
@ -63,7 +63,7 @@ public static class GameCard
|
|||
var sb = new U8StringBuilder(nameBuffer);
|
||||
sb.Append(CommonMountNames.GameCardFileSystemMountName)
|
||||
.Append(GetGameCardMountNameSuffix(_partitionId))
|
||||
.AppendFormat(_handle.Value, 'x', (byte)handleDigitCount)
|
||||
.AppendFormat(_handle, 'x', (byte)handleDigitCount)
|
||||
.Append(StringTraits.DriveSeparator);
|
||||
|
||||
Assert.SdkEqual(sb.Length, requiredNameBufferSize - 1);
|
||||
|
@ -83,11 +83,11 @@ public static class GameCard
|
|||
fs.Impl.AbortIfNeeded(rc);
|
||||
if (rc.IsFailure()) return rc;
|
||||
|
||||
rc = deviceOperator.Get.GetGameCardHandle(out uint handle);
|
||||
rc = deviceOperator.Get.GetGameCardHandle(out GameCardHandle handle);
|
||||
fs.Impl.AbortIfNeeded(rc);
|
||||
if (rc.IsFailure()) return rc.Miss();
|
||||
|
||||
outHandle = new GameCardHandle((int)handle);
|
||||
outHandle = handle;
|
||||
return Result.Success;
|
||||
}
|
||||
|
||||
|
@ -107,7 +107,7 @@ public static class GameCard
|
|||
var sb = new U8StringBuilder(logBuffer, true);
|
||||
|
||||
sb.Append(LogName).Append(mountName).Append(LogQuote)
|
||||
.Append(LogGameCardHandle).AppendFormat(handle.Value)
|
||||
.Append(LogGameCardHandle).AppendFormat(handle)
|
||||
.Append(LogGameCardPartition).Append(idString.ToString(partitionId));
|
||||
|
||||
fs.Impl.OutputAccessLog(rc, start, end, null, new U8Span(sb.Buffer));
|
||||
|
|
|
@ -108,11 +108,6 @@ public class EmulatedDeviceOperator : IDeviceOperator
|
|||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Result GetGameCardHandle(out uint outHandle)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Result GetGameCardUpdatePartitionInfo(out uint outCupVersion, out ulong outCupId, uint handle)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace LibHac.FsSrv;
|
|||
public class EmulatedGameCard
|
||||
{
|
||||
private IStorage CardImageStorage { get; set; }
|
||||
private int Handle { get; set; }
|
||||
private GameCardHandle Handle { get; set; }
|
||||
private XciHeader CardHeader { get; set; }
|
||||
private Xci CardImage { get; set; }
|
||||
private KeySet KeySet { get; set; }
|
||||
|
@ -22,12 +22,12 @@ public class EmulatedGameCard
|
|||
}
|
||||
public GameCardHandle GetGameCardHandle()
|
||||
{
|
||||
return new GameCardHandle(Handle);
|
||||
return Handle;
|
||||
}
|
||||
|
||||
public bool IsGameCardHandleInvalid(GameCardHandle handle)
|
||||
{
|
||||
return Handle != handle.Value;
|
||||
return Handle != handle;
|
||||
}
|
||||
|
||||
public bool IsGameCardInserted()
|
||||
|
|
|
@ -225,7 +225,7 @@ public class DeviceOperator : IDeviceOperator
|
|||
return _fsServer.Storage.EraseGameCard(gameCardSize, romAreaStartPageAddress).Ret();
|
||||
}
|
||||
|
||||
public Result GetGameCardHandle(out uint outHandle)
|
||||
public Result GetGameCardHandle(out GameCardHandle outHandle)
|
||||
{
|
||||
UnsafeHelpers.SkipParamInit(out outHandle);
|
||||
|
||||
|
@ -236,14 +236,14 @@ public class DeviceOperator : IDeviceOperator
|
|||
if (!isInserted)
|
||||
return ResultFs.GameCardFsGetHandleFailure.Log();
|
||||
|
||||
rc = _fsServer.Storage.GetGameCardHandle(out uint handle);
|
||||
rc = _fsServer.Storage.GetGameCardHandle(out GameCardHandle handle);
|
||||
if (rc.IsFailure()) return rc.Miss();
|
||||
|
||||
outHandle = handle;
|
||||
return Result.Success;
|
||||
}
|
||||
|
||||
public Result GetGameCardUpdatePartitionInfo(out uint outCupVersion, out ulong outCupId, uint handle)
|
||||
public Result GetGameCardUpdatePartitionInfo(out uint outCupVersion, out ulong outCupId, GameCardHandle handle)
|
||||
{
|
||||
UnsafeHelpers.SkipParamInit(out outCupVersion, out outCupId);
|
||||
|
||||
|
@ -265,7 +265,7 @@ public class DeviceOperator : IDeviceOperator
|
|||
return Result.Success;
|
||||
}
|
||||
|
||||
public Result GetGameCardAttribute(out byte outAttribute, uint handle)
|
||||
public Result GetGameCardAttribute(out byte outAttribute, GameCardHandle handle)
|
||||
{
|
||||
UnsafeHelpers.SkipParamInit(out outAttribute);
|
||||
|
||||
|
@ -276,7 +276,7 @@ public class DeviceOperator : IDeviceOperator
|
|||
return Result.Success;
|
||||
}
|
||||
|
||||
public Result GetGameCardCompatibilityType(out byte outCompatibilityType, uint handle)
|
||||
public Result GetGameCardCompatibilityType(out byte outCompatibilityType, GameCardHandle handle)
|
||||
{
|
||||
UnsafeHelpers.SkipParamInit(out outCompatibilityType);
|
||||
|
||||
|
@ -287,7 +287,7 @@ public class DeviceOperator : IDeviceOperator
|
|||
return Result.Success;
|
||||
}
|
||||
|
||||
public Result GetGameCardDeviceCertificate(OutBuffer outBuffer, long outBufferSize, uint handle)
|
||||
public Result GetGameCardDeviceCertificate(OutBuffer outBuffer, long outBufferSize, GameCardHandle handle)
|
||||
{
|
||||
if (!_accessControl.CanCall(OperationType.GetGameCardDeviceCertificate))
|
||||
return ResultFs.PermissionDenied.Log();
|
||||
|
@ -299,7 +299,7 @@ public class DeviceOperator : IDeviceOperator
|
|||
}
|
||||
|
||||
public Result ChallengeCardExistence(OutBuffer outResponseBuffer, InBuffer challengeSeedBuffer,
|
||||
InBuffer challengeValueBuffer, uint handle)
|
||||
InBuffer challengeValueBuffer, GameCardHandle handle)
|
||||
{
|
||||
if (!_accessControl.CanCall(OperationType.ChallengeCardExistence))
|
||||
return ResultFs.PermissionDenied.Log();
|
||||
|
@ -370,7 +370,7 @@ public class DeviceOperator : IDeviceOperator
|
|||
return Result.Success;
|
||||
}
|
||||
|
||||
public Result GetGameCardImageHash(OutBuffer outBuffer, long outBufferSize, uint handle)
|
||||
public Result GetGameCardImageHash(OutBuffer outBuffer, long outBufferSize, GameCardHandle handle)
|
||||
{
|
||||
if (outBuffer.Size < outBufferSize)
|
||||
return ResultFs.InvalidSize.Log();
|
||||
|
|
|
@ -104,8 +104,7 @@ public class NcaFileSystemServiceImpl
|
|||
|
||||
if (type == FileSystemProxyType.Logo && mountNameInfo.IsGameCard)
|
||||
{
|
||||
rc = _config.BaseFsService.OpenGameCardFileSystem(ref outFileSystem,
|
||||
new GameCardHandle(mountNameInfo.GcHandle),
|
||||
rc = _config.BaseFsService.OpenGameCardFileSystem(ref outFileSystem, (uint)mountNameInfo.GcHandle,
|
||||
GameCardPartition.Logo);
|
||||
|
||||
if (rc.IsSuccess())
|
||||
|
@ -352,8 +351,7 @@ public class NcaFileSystemServiceImpl
|
|||
|
||||
path = path.Slice(8);
|
||||
|
||||
Result rc = _config.BaseFsService.OpenGameCardFileSystem(ref outFileSystem, new GameCardHandle(handle),
|
||||
partition);
|
||||
Result rc = _config.BaseFsService.OpenGameCardFileSystem(ref outFileSystem, (uint)handle, partition);
|
||||
if (rc.IsFailure()) return rc;
|
||||
|
||||
info.GcHandle = handle;
|
||||
|
|
|
@ -23,16 +23,16 @@ public interface IDeviceOperator : IDisposable
|
|||
Result ResumeMmcPatrol();
|
||||
Result IsGameCardInserted(out bool outIsInserted);
|
||||
Result EraseGameCard(uint gameCardSize, ulong romAreaStartPageAddress);
|
||||
Result GetGameCardHandle(out uint outHandle);
|
||||
Result GetGameCardUpdatePartitionInfo(out uint outCupVersion, out ulong outCupId, uint handle);
|
||||
Result GetGameCardHandle(out GameCardHandle outHandle);
|
||||
Result GetGameCardUpdatePartitionInfo(out uint outCupVersion, out ulong outCupId, GameCardHandle handle);
|
||||
Result FinalizeGameCardDriver();
|
||||
Result GetGameCardAttribute(out byte outAttribute, uint handle);
|
||||
Result GetGameCardDeviceCertificate(OutBuffer outBuffer, long outBufferSize, uint handle);
|
||||
Result GetGameCardAttribute(out byte outAttribute, GameCardHandle handle);
|
||||
Result GetGameCardDeviceCertificate(OutBuffer outBuffer, long outBufferSize, GameCardHandle handle);
|
||||
Result GetGameCardAsicInfo(OutBuffer outRmaInfoBuffer, long rmaInfoBufferSize, InBuffer asicFirmwareBuffer, long asicFirmwareBufferSize);
|
||||
Result GetGameCardIdSet(OutBuffer outBuffer, long outBufferSize);
|
||||
Result WriteToGameCardDirectly(long offset, OutBuffer buffer, long bufferSize);
|
||||
Result SetVerifyWriteEnableFlag(bool isEnabled);
|
||||
Result GetGameCardImageHash(OutBuffer outBuffer, long outBufferSize, uint handle);
|
||||
Result GetGameCardImageHash(OutBuffer outBuffer, long outBufferSize, GameCardHandle handle);
|
||||
Result GetGameCardDeviceIdForProdCard(OutBuffer outBuffer, long outBufferSize, InBuffer devHeaderBuffer, long devHeaderBufferSize);
|
||||
Result EraseAndWriteParamDirectly(InBuffer inBuffer, long inBufferSize);
|
||||
Result ReadParamDirectly(OutBuffer outBuffer, long outBufferSize);
|
||||
|
@ -40,8 +40,8 @@ public interface IDeviceOperator : IDisposable
|
|||
Result GetGameCardErrorInfo(out GameCardErrorInfo outErrorInfo);
|
||||
Result GetGameCardErrorReportInfo(out GameCardErrorReportInfo outErrorInfo);
|
||||
Result GetGameCardDeviceId(OutBuffer outBuffer, long outBufferSize);
|
||||
Result ChallengeCardExistence(OutBuffer outResponseBuffer, InBuffer challengeSeedBuffer, InBuffer challengeValueBuffer, uint handle);
|
||||
Result GetGameCardCompatibilityType(out byte outCompatibilityType, uint handle);
|
||||
Result ChallengeCardExistence(OutBuffer outResponseBuffer, InBuffer challengeSeedBuffer, InBuffer challengeValueBuffer, GameCardHandle handle);
|
||||
Result GetGameCardCompatibilityType(out byte outCompatibilityType, GameCardHandle handle);
|
||||
Result SetSpeedEmulationMode(int mode);
|
||||
Result GetSpeedEmulationMode(out int outMode);
|
||||
Result SuspendSdmmcControl();
|
||||
|
|
|
@ -106,7 +106,7 @@ internal static class GameCardService
|
|||
}
|
||||
|
||||
public static Result OpenGameCardStorage(this StorageService service, ref SharedRef<IStorage> outStorage,
|
||||
OpenGameCardAttribute attribute, uint handle)
|
||||
OpenGameCardAttribute attribute, GameCardHandle handle)
|
||||
{
|
||||
using var gameCardStorageDevice = new SharedRef<IStorageDevice>();
|
||||
|
||||
|
@ -153,10 +153,10 @@ internal static class GameCardService
|
|||
{
|
||||
if (g.CachedStorageDevice.HasValue)
|
||||
{
|
||||
Result rc = g.CachedStorageDevice.Get.GetHandle(out uint handleValue);
|
||||
Result rc = g.CachedStorageDevice.Get.GetHandle(out GameCardHandle handle);
|
||||
if (rc.IsFailure()) return rc.Miss();
|
||||
|
||||
outHandle = new StorageDeviceHandle(handleValue, StorageDevicePortId.GameCard);
|
||||
outHandle = new StorageDeviceHandle(handle, StorageDevicePortId.GameCard);
|
||||
return Result.Success;
|
||||
}
|
||||
}
|
||||
|
@ -167,7 +167,7 @@ internal static class GameCardService
|
|||
OpenGameCardAttribute.ReadOnly);
|
||||
if (rc.IsFailure()) return rc.Miss();
|
||||
|
||||
rc = gameCardStorageDevice.Get.GetHandle(out uint handleValue);
|
||||
rc = gameCardStorageDevice.Get.GetHandle(out GameCardHandle handleValue);
|
||||
if (rc.IsFailure()) return rc.Miss();
|
||||
|
||||
outHandle = new StorageDeviceHandle(handleValue, StorageDevicePortId.GameCard);
|
||||
|
@ -228,7 +228,7 @@ internal static class GameCardService
|
|||
}
|
||||
|
||||
public static Result GetGameCardStatus(this StorageService service, out GameCardStatus outGameCardStatus,
|
||||
uint handle)
|
||||
GameCardHandle handle)
|
||||
{
|
||||
UnsafeHelpers.SkipParamInit(out outGameCardStatus);
|
||||
|
||||
|
@ -267,7 +267,8 @@ internal static class GameCardService
|
|||
return gcOperator.Get.Operate(operationId);
|
||||
}
|
||||
|
||||
public static Result GetGameCardDeviceCertificate(this StorageService service, Span<byte> outBuffer, uint handle)
|
||||
public static Result GetGameCardDeviceCertificate(this StorageService service, Span<byte> outBuffer,
|
||||
GameCardHandle handle)
|
||||
{
|
||||
using var gcOperator = new SharedRef<IStorageDeviceOperator>();
|
||||
Result rc = service.GetGameCardOperator(ref gcOperator.Ref());
|
||||
|
@ -294,7 +295,7 @@ internal static class GameCardService
|
|||
}
|
||||
|
||||
public static Result ChallengeCardExistence(this StorageService service, Span<byte> outResponseBuffer,
|
||||
ReadOnlySpan<byte> challengeSeed, ReadOnlySpan<byte> challengeValue, uint handle)
|
||||
ReadOnlySpan<byte> challengeSeed, ReadOnlySpan<byte> challengeValue, GameCardHandle handle)
|
||||
{
|
||||
using var gcOperator = new SharedRef<IStorageDeviceOperator>();
|
||||
Result rc = service.GetGameCardOperator(ref gcOperator.Ref());
|
||||
|
@ -323,16 +324,16 @@ internal static class GameCardService
|
|||
return Result.Success;
|
||||
}
|
||||
|
||||
public static Result GetGameCardHandle(this StorageService service, out uint handle)
|
||||
public static Result GetGameCardHandle(this StorageService service, out GameCardHandle outHandle)
|
||||
{
|
||||
UnsafeHelpers.SkipParamInit(out handle);
|
||||
UnsafeHelpers.SkipParamInit(out outHandle);
|
||||
|
||||
using var gcOperator = new SharedRef<IStorageDeviceOperator>();
|
||||
Result rc = service.GetGameCardManagerOperator(ref gcOperator.Ref());
|
||||
if (rc.IsFailure()) return rc.Miss();
|
||||
|
||||
// Get the current handle.
|
||||
OutBuffer handleOutBuffer = OutBuffer.FromStruct(ref handle);
|
||||
OutBuffer handleOutBuffer = OutBuffer.FromStruct(ref outHandle);
|
||||
int operationId = MakeOperationId(GameCardManagerOperationIdValue.GetHandle);
|
||||
|
||||
rc = gcOperator.Get.OperateOut(out long bytesWritten, handleOutBuffer, operationId);
|
||||
|
@ -346,7 +347,7 @@ internal static class GameCardService
|
|||
|
||||
if (g.CachedStorageDevice.HasValue)
|
||||
{
|
||||
g.CachedStorageDevice.Get.GetHandle(out uint handleValue);
|
||||
g.CachedStorageDevice.Get.GetHandle(out GameCardHandle handleValue);
|
||||
if (rc.IsFailure()) return rc.Miss();
|
||||
|
||||
var currentHandle = new StorageDeviceHandle(handleValue, StorageDevicePortId.GameCard);
|
||||
|
@ -432,7 +433,7 @@ internal static class GameCardService
|
|||
return gcOperator.Get.OperateIn(inIsEnabledBuffer, offset: 0, size: 0, operationId);
|
||||
}
|
||||
|
||||
public static Result GetGameCardImageHash(this StorageService service, Span<byte> outBuffer, uint handle)
|
||||
public static Result GetGameCardImageHash(this StorageService service, Span<byte> outBuffer, GameCardHandle handle)
|
||||
{
|
||||
using var gcOperator = new SharedRef<IStorageDeviceOperator>();
|
||||
Result rc = service.GetGameCardOperator(ref gcOperator.Ref());
|
||||
|
@ -573,7 +574,7 @@ internal static class GameCardService
|
|||
return Result.Success;
|
||||
}
|
||||
|
||||
public static bool IsGameCardActivationValid(this StorageService service, uint handle)
|
||||
public static bool IsGameCardActivationValid(this StorageService service, GameCardHandle handle)
|
||||
{
|
||||
using var gcOperator = new SharedRef<IStorageDeviceOperator>();
|
||||
Result rc = service.GetGameCardManagerOperator(ref gcOperator.Ref());
|
||||
|
|
|
@ -492,16 +492,6 @@ public class TypeLayoutTests
|
|||
Assert.Equal(0x38, GetOffset(in s, in s.Reserved38));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public static void GameCardHandle_Layout()
|
||||
{
|
||||
var s = new GameCardHandle();
|
||||
|
||||
Assert.Equal(4, Unsafe.SizeOf<GameCardHandle>());
|
||||
|
||||
Assert.Equal(0, GetOffset(in s, in s.Value));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public static void Int64_Layout()
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue