mirror of
https://github.com/ryujinx-mirror/ryujinx.git
synced 2024-10-20 22:01:41 +00:00
ea14a95524
* Fix inconsistencies with UserId The account user id isn't an UUID. This PR adds a new UserId type with the correct value ordering to avoid mismatch with LibHac's Uid. This also fix an hardcoded value of the UserId. As the userid has been invalid for quite some time (and to avoid forcing users to their recreate saves), the userid has been changed to "00000000000000010000000000000000". Also implement a stub for IApplicationFunctions::GetSaveDataSize. (see the sources for the reason) Fix #626 * Address jd's & Ac_k's comments
81 lines
No EOL
2 KiB
C#
81 lines
No EOL
2 KiB
C#
using LibHac.Account;
|
|
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|
{
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct UserId : IEquatable<UserId>
|
|
{
|
|
public readonly long High;
|
|
public readonly long Low;
|
|
|
|
public bool IsNull => (Low | High) == 0;
|
|
|
|
public UserId(long low, long high)
|
|
{
|
|
Low = low;
|
|
High = high;
|
|
}
|
|
|
|
public UserId(byte[] bytes)
|
|
{
|
|
High = BitConverter.ToInt64(bytes, 0);
|
|
Low = BitConverter.ToInt64(bytes, 8);
|
|
}
|
|
|
|
public UserId(string hex)
|
|
{
|
|
if (hex == null || hex.Length != 32 || !hex.All("0123456789abcdefABCDEF".Contains))
|
|
{
|
|
throw new ArgumentException("Invalid Hex value!", nameof(hex));
|
|
}
|
|
|
|
Low = Convert.ToInt64(hex.Substring(16), 16);
|
|
High = Convert.ToInt64(hex.Substring(0, 16), 16);
|
|
}
|
|
|
|
public void Write(BinaryWriter binaryWriter)
|
|
{
|
|
binaryWriter.Write(High);
|
|
binaryWriter.Write(Low);
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return High.ToString("x16") + Low.ToString("x16");
|
|
}
|
|
|
|
public static bool operator ==(UserId x, UserId y)
|
|
{
|
|
return x.Equals(y);
|
|
}
|
|
|
|
public static bool operator !=(UserId x, UserId y)
|
|
{
|
|
return !x.Equals(y);
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
return obj is UserId userId && Equals(userId);
|
|
}
|
|
|
|
public bool Equals(UserId cmpObj)
|
|
{
|
|
return Low == cmpObj.Low && High == cmpObj.High;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return HashCode.Combine(Low, High);
|
|
}
|
|
|
|
public Uid ToLibHacUid()
|
|
{
|
|
return new Uid((ulong)High, (ulong)Low);
|
|
}
|
|
}
|
|
} |