diff --git a/build/CodeGen/IndentingStringBuilder.cs b/build/CodeGen/IndentingStringBuilder.cs index 31b601d4..2d0e8ab3 100644 --- a/build/CodeGen/IndentingStringBuilder.cs +++ b/build/CodeGen/IndentingStringBuilder.cs @@ -11,6 +11,7 @@ namespace LibHacBuild.CodeGen private StringBuilder _sb = new StringBuilder(); private string _indentation = string.Empty; private bool _hasIndentedCurrentLine; + private bool _lastLineWasEmpty; public IndentingStringBuilder() { } public IndentingStringBuilder(int levelSize) => LevelSize = levelSize; @@ -28,6 +29,19 @@ namespace LibHacBuild.CodeGen { _sb.AppendLine(); _hasIndentedCurrentLine = false; + _lastLineWasEmpty = true; + return this; + } + + public IndentingStringBuilder AppendSpacerLine() + { + if (!_lastLineWasEmpty) + { + _sb.AppendLine(); + _hasIndentedCurrentLine = false; + _lastLineWasEmpty = true; + } + return this; } @@ -36,6 +50,7 @@ namespace LibHacBuild.CodeGen IndentIfNeeded(); _sb.AppendLine(value); _hasIndentedCurrentLine = false; + _lastLineWasEmpty = string.IsNullOrWhiteSpace(value); return this; } diff --git a/build/CodeGen/ResultCodegen.cs b/build/CodeGen/ResultCodegen.cs index df4f7af9..dd777069 100644 --- a/build/CodeGen/ResultCodegen.cs +++ b/build/CodeGen/ResultCodegen.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Reflection; using System.Text; using CsvHelper; +using CsvHelper.Configuration; using Nuke.Common; namespace LibHacBuild.CodeGen @@ -20,7 +21,9 @@ namespace LibHacBuild.CodeGen { ModuleInfo[] modules = ReadResults(); - SetEmptyResultNames(modules); + SetEmptyResultValues(modules); + ValidateResults(modules); + ValidateHierarchy(modules); CheckIfAggressiveInliningNeeded(modules); SetOutputPaths(modules); @@ -65,19 +68,68 @@ namespace LibHacBuild.CodeGen return modules.Values.ToArray(); } - private static void SetEmptyResultNames(ModuleInfo[] modules) + private static void SetEmptyResultValues(ModuleInfo[] modules) { foreach (ModuleInfo module in modules) { foreach (ResultInfo result in module.Results.Where(x => string.IsNullOrWhiteSpace(x.Name))) { - if (result.DescriptionEnd.HasValue) + if (result.IsRange) { result.Name += $"Range{result.DescriptionStart}To{result.DescriptionEnd}"; } else { result.Name = $"Result{result.DescriptionStart}"; + result.DescriptionEnd = result.DescriptionStart; + } + } + } + } + + private static void ValidateResults(ModuleInfo[] modules) + { + foreach (ModuleInfo module in modules) + { + foreach (ResultInfo result in module.Results) + { + // Logic should match Result.Base.ctor + Assert(1 <= result.Module && result.Module < 512, "Invalid Module"); + Assert(0 <= result.DescriptionStart && result.DescriptionStart < 8192, "Invalid Description Start"); + Assert(0 <= result.DescriptionEnd && result.DescriptionEnd < 8192, "Invalid Description End"); + Assert(result.DescriptionStart <= result.DescriptionEnd, "descriptionStart must be <= descriptionEnd"); + + // ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local + void Assert(bool condition, string message) + { + if (!condition) + throw new InvalidDataException($"Result {result.Module}-{result.DescriptionStart}: {message}"); + } + } + } + } + + private static void ValidateHierarchy(ModuleInfo[] modules) + { + foreach (ModuleInfo module in modules) + { + var hierarchy = new Stack(); + + foreach (ResultInfo result in module.Results) + { + while (hierarchy.Count > 0 && hierarchy.Peek().DescriptionEnd < result.DescriptionStart) + { + hierarchy.Pop(); + } + + if (result.IsRange) + { + if (hierarchy.Count > 0 && result.DescriptionEnd > hierarchy.Peek().DescriptionEnd) + { + throw new InvalidDataException($"Result {result.Module}-{result.DescriptionStart} is not nested properly."); + } + + hierarchy.Push(result); } } } @@ -120,9 +172,38 @@ namespace LibHacBuild.CodeGen sb.AppendLine($"public const int Module{module.Name} = {module.Index};"); sb.AppendLine(); + var hierarchy = new Stack(); + bool justIndented = false; + foreach (ResultInfo result in module.Results) { + while (hierarchy.Count > 0 && hierarchy.Peek().DescriptionEnd < result.DescriptionStart) + { + hierarchy.Pop(); + sb.DecreaseLevel(); + sb.AppendSpacerLine(); + } + + if (!justIndented && result.IsRange) + { + sb.AppendSpacerLine(); + } + PrintResult(sb, module.Name, result); + + if (result.IsRange) + { + hierarchy.Push(result); + sb.IncreaseLevel(); + } + + justIndented = result.IsRange; + } + + while (hierarchy.Count > 0) + { + hierarchy.Pop(); + sb.DecreaseLevel(); } sb.DecreaseAndAppendLine("}"); @@ -135,7 +216,7 @@ namespace LibHacBuild.CodeGen { string descriptionArgs; - if (result.DescriptionEnd.HasValue) + if (result.IsRange) { descriptionArgs = $"{result.DescriptionStart}, {result.DescriptionEnd}"; } @@ -197,6 +278,11 @@ namespace LibHacBuild.CodeGen { csv.Configuration.AllowComments = true; + if (typeof(T) == typeof(ResultInfo)) + { + csv.Configuration.RegisterClassMap(); + } + return csv.GetRecords().ToArray(); } } @@ -239,8 +325,8 @@ namespace LibHacBuild.CodeGen size += GetLoadSize(result.Module); size += GetLoadSize(result.DescriptionStart); - if (result.DescriptionEnd.HasValue) - size += GetLoadSize(result.DescriptionEnd.Value); + if (result.IsRange) + size += GetLoadSize(result.DescriptionEnd); size += 5; // newobj size += 1; // ret @@ -291,10 +377,29 @@ namespace LibHacBuild.CodeGen { public int Module { get; set; } public int DescriptionStart { get; set; } - public int? DescriptionEnd { get; set; } + public int DescriptionEnd { get; set; } public string Name { get; set; } + public bool IsRange => DescriptionStart != DescriptionEnd; public string ErrorCode => $"{2000 + Module:d4}-{DescriptionStart:d4}"; public int InnerValue => Module & 0x1ff | ((DescriptionStart & 0x7ffff) << 9); } + + public sealed class ResultMap : ClassMap + { + public ResultMap() + { + Map(m => m.Module); + Map(m => m.Name); + Map(m => m.DescriptionStart); + Map(m => m.DescriptionEnd).ConvertUsing(row => + { + string field = row.GetField("DescriptionEnd"); + if (string.IsNullOrWhiteSpace(field)) + field = row.GetField("DescriptionStart"); + + return int.Parse(field); + }); + } + } } diff --git a/src/LibHac/Fs/ResultFs.cs b/src/LibHac/Fs/ResultFs.cs index 07b45851..a9a25766 100644 --- a/src/LibHac/Fs/ResultFs.cs +++ b/src/LibHac/Fs/ResultFs.cs @@ -7,180 +7,220 @@ namespace LibHac.Fs public const int ModuleFs = 2; public static Result.Base HandledByAllProcess => new Result.Base(ModuleFs, 0, 999); - public static Result.Base PathNotFound => new Result.Base(ModuleFs, 1); - public static Result.Base PathAlreadyExists => new Result.Base(ModuleFs, 2); - public static Result.Base TargetLocked => new Result.Base(ModuleFs, 7); - public static Result.Base DirectoryNotEmpty => new Result.Base(ModuleFs, 8); - public static Result.Base DirectoryStatusChanged => new Result.Base(ModuleFs, 13); - public static Result.Base InsufficientFreeSpace => new Result.Base(ModuleFs, 30, 45); - public static Result.Base UsableSpaceNotEnoughForSaveData => new Result.Base(ModuleFs, 31); - public static Result.Base InsufficientFreeSpaceBis => new Result.Base(ModuleFs, 34, 38); - public static Result.Base InsufficientFreeSpaceBisCalibration => new Result.Base(ModuleFs, 35); - public static Result.Base InsufficientFreeSpaceBisSafe => new Result.Base(ModuleFs, 36); - public static Result.Base InsufficientFreeSpaceBisUser => new Result.Base(ModuleFs, 37); - public static Result.Base InsufficientFreeSpaceBisSystem => new Result.Base(ModuleFs, 38); - public static Result.Base InsufficientFreeSpaceSdCard => new Result.Base(ModuleFs, 39); - public static Result.Base UnsupportedSdkVersion => new Result.Base(ModuleFs, 50); - public static Result.Base MountNameAlreadyExists => new Result.Base(ModuleFs, 60); + public static Result.Base PathNotFound => new Result.Base(ModuleFs, 1); + public static Result.Base PathAlreadyExists => new Result.Base(ModuleFs, 2); + public static Result.Base TargetLocked => new Result.Base(ModuleFs, 7); + public static Result.Base DirectoryNotEmpty => new Result.Base(ModuleFs, 8); + public static Result.Base DirectoryStatusChanged => new Result.Base(ModuleFs, 13); + + public static Result.Base InsufficientFreeSpace => new Result.Base(ModuleFs, 30, 45); + public static Result.Base UsableSpaceNotEnoughForSaveData => new Result.Base(ModuleFs, 31); + + public static Result.Base InsufficientFreeSpaceBis => new Result.Base(ModuleFs, 34, 38); + public static Result.Base InsufficientFreeSpaceBisCalibration => new Result.Base(ModuleFs, 35); + public static Result.Base InsufficientFreeSpaceBisSafe => new Result.Base(ModuleFs, 36); + public static Result.Base InsufficientFreeSpaceBisUser => new Result.Base(ModuleFs, 37); + public static Result.Base InsufficientFreeSpaceBisSystem => new Result.Base(ModuleFs, 38); + + public static Result.Base InsufficientFreeSpaceSdCard => new Result.Base(ModuleFs, 39); + + public static Result.Base UnsupportedSdkVersion => new Result.Base(ModuleFs, 50); + public static Result.Base MountNameAlreadyExists => new Result.Base(ModuleFs, 60); + public static Result.Base PartitionNotFound => new Result.Base(ModuleFs, 1001); public static Result.Base TargetNotFound => new Result.Base(ModuleFs, 1002); public static Result.Base ExternalKeyNotFound => new Result.Base(ModuleFs, 1004); + public static Result.Base SdCardAccessFailed { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 2000, 2499); } - public static Result.Base SdCardNotFound => new Result.Base(ModuleFs, 2001); - public static Result.Base SdCardAsleep => new Result.Base(ModuleFs, 2004); + public static Result.Base SdCardNotFound => new Result.Base(ModuleFs, 2001); + public static Result.Base SdCardAsleep => new Result.Base(ModuleFs, 2004); + public static Result.Base GameCardAccessFailed { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 2500, 2999); } - public static Result.Base InvalidBufferForGameCard => new Result.Base(ModuleFs, 2503); - public static Result.Base GameCardNotInserted => new Result.Base(ModuleFs, 2520); - public static Result.Base GameCardNotInsertedOnGetHandle => new Result.Base(ModuleFs, 2951); - public static Result.Base InvalidGameCardHandleOnRead => new Result.Base(ModuleFs, 2952); - public static Result.Base InvalidGameCardHandleOnGetCardInfo => new Result.Base(ModuleFs, 2954); - public static Result.Base InvalidGameCardHandleOnOpenNormalPartition => new Result.Base(ModuleFs, 2960); - public static Result.Base InvalidGameCardHandleOnOpenSecurePartition => new Result.Base(ModuleFs, 2961); + public static Result.Base InvalidBufferForGameCard => new Result.Base(ModuleFs, 2503); + public static Result.Base GameCardNotInserted => new Result.Base(ModuleFs, 2520); + public static Result.Base GameCardNotInsertedOnGetHandle => new Result.Base(ModuleFs, 2951); + public static Result.Base InvalidGameCardHandleOnRead => new Result.Base(ModuleFs, 2952); + public static Result.Base InvalidGameCardHandleOnGetCardInfo => new Result.Base(ModuleFs, 2954); + public static Result.Base InvalidGameCardHandleOnOpenNormalPartition => new Result.Base(ModuleFs, 2960); + public static Result.Base InvalidGameCardHandleOnOpenSecurePartition => new Result.Base(ModuleFs, 2961); + public static Result.Base NotImplemented => new Result.Base(ModuleFs, 3001); public static Result.Base Result3002 => new Result.Base(ModuleFs, 3002); public static Result.Base SaveDataPathAlreadyExists => new Result.Base(ModuleFs, 3003); public static Result.Base OutOfRange => new Result.Base(ModuleFs, 3005); + public static Result.Base AllocationMemoryFailed { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 3200, 3499); } - public static Result.Base AesXtsFileFileStorageAllocationError => new Result.Base(ModuleFs, 3312); - public static Result.Base AesXtsFileXtsStorageAllocationError => new Result.Base(ModuleFs, 3313); - public static Result.Base AesXtsFileAlignmentStorageAllocationError => new Result.Base(ModuleFs, 3314); - public static Result.Base AesXtsFileStorageFileAllocationError => new Result.Base(ModuleFs, 3315); - public static Result.Base AesXtsFileSubStorageAllocationError => new Result.Base(ModuleFs, 3383); + public static Result.Base AesXtsFileFileStorageAllocationError => new Result.Base(ModuleFs, 3312); + public static Result.Base AesXtsFileXtsStorageAllocationError => new Result.Base(ModuleFs, 3313); + public static Result.Base AesXtsFileAlignmentStorageAllocationError => new Result.Base(ModuleFs, 3314); + public static Result.Base AesXtsFileStorageFileAllocationError => new Result.Base(ModuleFs, 3315); + public static Result.Base AesXtsFileSubStorageAllocationError => new Result.Base(ModuleFs, 3383); + public static Result.Base MmcAccessFailed { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 3500, 3999); } + public static Result.Base DataCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4000, 4999); } - public static Result.Base RomCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4001, 4299); } - public static Result.Base InvalidIndirectStorageSource => new Result.Base(ModuleFs, 4023); - public static Result.Base RomHostFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4241, 4259); } - public static Result.Base RomHostEntryCorrupted => new Result.Base(ModuleFs, 4242); - public static Result.Base RomHostFileDataCorrupted => new Result.Base(ModuleFs, 4243); - public static Result.Base RomHostFileCorrupted => new Result.Base(ModuleFs, 4244); - public static Result.Base InvalidRomHostHandle => new Result.Base(ModuleFs, 4245); - public static Result.Base SaveDataCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4301, 4499); } - public static Result.Base Result4302 => new Result.Base(ModuleFs, 4302); - public static Result.Base InvalidSaveDataEntryType => new Result.Base(ModuleFs, 4303); - public static Result.Base InvalidSaveDataHeader => new Result.Base(ModuleFs, 4315); - public static Result.Base Result4362 => new Result.Base(ModuleFs, 4362); - public static Result.Base Result4363 => new Result.Base(ModuleFs, 4363); - public static Result.Base InvalidHashInSaveIvfc => new Result.Base(ModuleFs, 4364); - public static Result.Base SaveIvfcHashIsEmpty => new Result.Base(ModuleFs, 4372); - public static Result.Base InvalidHashInSaveIvfcTopLayer => new Result.Base(ModuleFs, 4373); - public static Result.Base Result4402 => new Result.Base(ModuleFs, 4402); - public static Result.Base Result4427 => new Result.Base(ModuleFs, 4427); - public static Result.Base SaveDataHostFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4441, 4459); } - public static Result.Base SaveDataHostEntryCorrupted => new Result.Base(ModuleFs, 4442); - public static Result.Base SaveDataHostFileDataCorrupted => new Result.Base(ModuleFs, 4443); - public static Result.Base SaveDataHostFileCorrupted => new Result.Base(ModuleFs, 4444); - public static Result.Base InvalidSaveDataHostHandle => new Result.Base(ModuleFs, 4445); - public static Result.Base SaveDataAllocationTableCorrupted => new Result.Base(ModuleFs, 4462); - public static Result.Base SaveDataFileTableCorrupted => new Result.Base(ModuleFs, 4463); - public static Result.Base AllocationTableIteratedRangeEntry => new Result.Base(ModuleFs, 4464); - public static Result.Base NcaCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4501, 4599); } - public static Result.Base IntegrityVerificationStorageCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4601, 4639); } - public static Result.Base Result4602 => new Result.Base(ModuleFs, 4602); - public static Result.Base Result4603 => new Result.Base(ModuleFs, 4603); - public static Result.Base InvalidHashInIvfc => new Result.Base(ModuleFs, 4604); - public static Result.Base IvfcHashIsEmpty => new Result.Base(ModuleFs, 4612); - public static Result.Base InvalidHashInIvfcTopLayer => new Result.Base(ModuleFs, 4613); - public static Result.Base PartitionFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4641, 4659); } - public static Result.Base InvalidPartitionFileSystemHashOffset => new Result.Base(ModuleFs, 4642); - public static Result.Base InvalidPartitionFileSystemHash => new Result.Base(ModuleFs, 4643); - public static Result.Base InvalidPartitionFileSystemMagic => new Result.Base(ModuleFs, 4644); - public static Result.Base InvalidHashedPartitionFileSystemMagic => new Result.Base(ModuleFs, 4645); - public static Result.Base InvalidPartitionFileSystemEntryNameOffset => new Result.Base(ModuleFs, 4646); - public static Result.Base BuiltInStorageCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4661, 4679); } - public static Result.Base Result4662 => new Result.Base(ModuleFs, 4662); - public static Result.Base FatFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4681, 4699); } - public static Result.Base HostFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4701, 4719); } - public static Result.Base HostEntryCorrupted => new Result.Base(ModuleFs, 4702); - public static Result.Base HostFileDataCorrupted => new Result.Base(ModuleFs, 4703); - public static Result.Base HostFileCorrupted => new Result.Base(ModuleFs, 4704); - public static Result.Base InvalidHostHandle => new Result.Base(ModuleFs, 4705); - public static Result.Base DatabaseCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4721, 4739); } - public static Result.Base SaveDataAllocationTableCorruptedInternal => new Result.Base(ModuleFs, 4722); - public static Result.Base SaveDataFileTableCorruptedInternal => new Result.Base(ModuleFs, 4723); - public static Result.Base AllocationTableIteratedRangeEntryInternal => new Result.Base(ModuleFs, 4724); - public static Result.Base AesXtsFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4741, 4759); } - public static Result.Base AesXtsFileHeaderTooShort => new Result.Base(ModuleFs, 4742); - public static Result.Base AesXtsFileHeaderInvalidKeys => new Result.Base(ModuleFs, 4743); - public static Result.Base AesXtsFileHeaderInvalidMagic => new Result.Base(ModuleFs, 4744); - public static Result.Base AesXtsFileTooShort => new Result.Base(ModuleFs, 4745); - public static Result.Base AesXtsFileHeaderTooShortInSetSize => new Result.Base(ModuleFs, 4746); - public static Result.Base AesXtsFileHeaderInvalidKeysInRenameFile => new Result.Base(ModuleFs, 4747); - public static Result.Base AesXtsFileHeaderInvalidKeysInSetSize => new Result.Base(ModuleFs, 4748); - public static Result.Base SaveDataTransferDataCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4761, 4769); } - public static Result.Base SignedSystemPartitionDataCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4771, 4779); } - public static Result.Base GameCardLogoDataCorrupted => new Result.Base(ModuleFs, 4781); - public static Result.Base Range4811To4819 { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4811, 4819); } - public static Result.Base Result4812 => new Result.Base(ModuleFs, 4812); + public static Result.Base RomCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4001, 4299); } + public static Result.Base InvalidIndirectStorageSource => new Result.Base(ModuleFs, 4023); + + public static Result.Base RomHostFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4241, 4259); } + public static Result.Base RomHostEntryCorrupted => new Result.Base(ModuleFs, 4242); + public static Result.Base RomHostFileDataCorrupted => new Result.Base(ModuleFs, 4243); + public static Result.Base RomHostFileCorrupted => new Result.Base(ModuleFs, 4244); + public static Result.Base InvalidRomHostHandle => new Result.Base(ModuleFs, 4245); + + public static Result.Base SaveDataCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4301, 4499); } + public static Result.Base Result4302 => new Result.Base(ModuleFs, 4302); + public static Result.Base InvalidSaveDataEntryType => new Result.Base(ModuleFs, 4303); + public static Result.Base InvalidSaveDataHeader => new Result.Base(ModuleFs, 4315); + public static Result.Base Result4362 => new Result.Base(ModuleFs, 4362); + public static Result.Base Result4363 => new Result.Base(ModuleFs, 4363); + public static Result.Base InvalidHashInSaveIvfc => new Result.Base(ModuleFs, 4364); + public static Result.Base SaveIvfcHashIsEmpty => new Result.Base(ModuleFs, 4372); + public static Result.Base InvalidHashInSaveIvfcTopLayer => new Result.Base(ModuleFs, 4373); + public static Result.Base Result4402 => new Result.Base(ModuleFs, 4402); + public static Result.Base Result4427 => new Result.Base(ModuleFs, 4427); + + public static Result.Base SaveDataHostFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4441, 4459); } + public static Result.Base SaveDataHostEntryCorrupted => new Result.Base(ModuleFs, 4442); + public static Result.Base SaveDataHostFileDataCorrupted => new Result.Base(ModuleFs, 4443); + public static Result.Base SaveDataHostFileCorrupted => new Result.Base(ModuleFs, 4444); + public static Result.Base InvalidSaveDataHostHandle => new Result.Base(ModuleFs, 4445); + + public static Result.Base SaveDataAllocationTableCorrupted => new Result.Base(ModuleFs, 4462); + public static Result.Base SaveDataFileTableCorrupted => new Result.Base(ModuleFs, 4463); + public static Result.Base AllocationTableIteratedRangeEntry => new Result.Base(ModuleFs, 4464); + + public static Result.Base NcaCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4501, 4599); } + + public static Result.Base IntegrityVerificationStorageCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4601, 4639); } + public static Result.Base Result4602 => new Result.Base(ModuleFs, 4602); + public static Result.Base Result4603 => new Result.Base(ModuleFs, 4603); + public static Result.Base InvalidHashInIvfc => new Result.Base(ModuleFs, 4604); + public static Result.Base IvfcHashIsEmpty => new Result.Base(ModuleFs, 4612); + public static Result.Base InvalidHashInIvfcTopLayer => new Result.Base(ModuleFs, 4613); + + public static Result.Base PartitionFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4641, 4659); } + public static Result.Base InvalidPartitionFileSystemHashOffset => new Result.Base(ModuleFs, 4642); + public static Result.Base InvalidPartitionFileSystemHash => new Result.Base(ModuleFs, 4643); + public static Result.Base InvalidPartitionFileSystemMagic => new Result.Base(ModuleFs, 4644); + public static Result.Base InvalidHashedPartitionFileSystemMagic => new Result.Base(ModuleFs, 4645); + public static Result.Base InvalidPartitionFileSystemEntryNameOffset => new Result.Base(ModuleFs, 4646); + + public static Result.Base BuiltInStorageCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4661, 4679); } + public static Result.Base Result4662 => new Result.Base(ModuleFs, 4662); + + public static Result.Base FatFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4681, 4699); } + + public static Result.Base HostFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4701, 4719); } + public static Result.Base HostEntryCorrupted => new Result.Base(ModuleFs, 4702); + public static Result.Base HostFileDataCorrupted => new Result.Base(ModuleFs, 4703); + public static Result.Base HostFileCorrupted => new Result.Base(ModuleFs, 4704); + public static Result.Base InvalidHostHandle => new Result.Base(ModuleFs, 4705); + + public static Result.Base DatabaseCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4721, 4739); } + public static Result.Base SaveDataAllocationTableCorruptedInternal => new Result.Base(ModuleFs, 4722); + public static Result.Base SaveDataFileTableCorruptedInternal => new Result.Base(ModuleFs, 4723); + public static Result.Base AllocationTableIteratedRangeEntryInternal => new Result.Base(ModuleFs, 4724); + + public static Result.Base AesXtsFileSystemCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4741, 4759); } + public static Result.Base AesXtsFileHeaderTooShort => new Result.Base(ModuleFs, 4742); + public static Result.Base AesXtsFileHeaderInvalidKeys => new Result.Base(ModuleFs, 4743); + public static Result.Base AesXtsFileHeaderInvalidMagic => new Result.Base(ModuleFs, 4744); + public static Result.Base AesXtsFileTooShort => new Result.Base(ModuleFs, 4745); + public static Result.Base AesXtsFileHeaderTooShortInSetSize => new Result.Base(ModuleFs, 4746); + public static Result.Base AesXtsFileHeaderInvalidKeysInRenameFile => new Result.Base(ModuleFs, 4747); + public static Result.Base AesXtsFileHeaderInvalidKeysInSetSize => new Result.Base(ModuleFs, 4748); + + public static Result.Base SaveDataTransferDataCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4761, 4769); } + + public static Result.Base SignedSystemPartitionDataCorrupted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4771, 4779); } + + public static Result.Base GameCardLogoDataCorrupted => new Result.Base(ModuleFs, 4781); + + public static Result.Base Range4811To4819 { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 4811, 4819); } + public static Result.Base Result4812 => new Result.Base(ModuleFs, 4812); + public static Result.Base Unexpected { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 5000, 5999); } - public static Result.Base UnexpectedErrorInHostFileFlush => new Result.Base(ModuleFs, 5307); - public static Result.Base UnexpectedErrorInHostFileGetSize => new Result.Base(ModuleFs, 5308); - public static Result.Base UnknownHostFileSystemError => new Result.Base(ModuleFs, 5309); - public static Result.Base InvalidNcaMountPoint => new Result.Base(ModuleFs, 5320); + public static Result.Base UnexpectedErrorInHostFileFlush => new Result.Base(ModuleFs, 5307); + public static Result.Base UnexpectedErrorInHostFileGetSize => new Result.Base(ModuleFs, 5308); + public static Result.Base UnknownHostFileSystemError => new Result.Base(ModuleFs, 5309); + public static Result.Base InvalidNcaMountPoint => new Result.Base(ModuleFs, 5320); + public static Result.Base PreconditionViolation { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6000, 6499); } - public static Result.Base InvalidArgument { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6001, 6199); } - public static Result.Base InvalidPath { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6002, 6029); } - public static Result.Base TooLongPath => new Result.Base(ModuleFs, 6003); - public static Result.Base InvalidCharacter => new Result.Base(ModuleFs, 6004); - public static Result.Base InvalidPathFormat => new Result.Base(ModuleFs, 6005); - public static Result.Base DirectoryUnobtainable => new Result.Base(ModuleFs, 6006); - public static Result.Base NotNormalized => new Result.Base(ModuleFs, 6007); - public static Result.Base InvalidPathForOperation { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6030, 6059); } - public static Result.Base DirectoryNotDeletable => new Result.Base(ModuleFs, 6031); - public static Result.Base DestinationIsSubPathOfSource => new Result.Base(ModuleFs, 6032); - public static Result.Base PathNotFoundInSaveDataFileTable => new Result.Base(ModuleFs, 6033); - public static Result.Base DifferentDestFileSystem => new Result.Base(ModuleFs, 6034); - public static Result.Base InvalidOffset => new Result.Base(ModuleFs, 6061); - public static Result.Base InvalidSize => new Result.Base(ModuleFs, 6062); - public static Result.Base NullArgument => new Result.Base(ModuleFs, 6063); - public static Result.Base InvalidMountName => new Result.Base(ModuleFs, 6065); - public static Result.Base ExtensionSizeTooLarge => new Result.Base(ModuleFs, 6066); - public static Result.Base ExtensionSizeInvalid => new Result.Base(ModuleFs, 6067); - public static Result.Base ReadOldSaveDataInfoReader => new Result.Base(ModuleFs, 6068); - public static Result.Base InvalidEnumValue { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6080, 6099); } - public static Result.Base InvalidSaveDataState => new Result.Base(ModuleFs, 6081); - public static Result.Base InvalidSaveDataSpaceId => new Result.Base(ModuleFs, 6082); - public static Result.Base InvalidOperationForOpenMode { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6200, 6299); } - public static Result.Base FileExtensionWithoutOpenModeAllowAppend => new Result.Base(ModuleFs, 6201); - public static Result.Base InvalidOpenModeForRead => new Result.Base(ModuleFs, 6202); - public static Result.Base InvalidOpenModeForWrite => new Result.Base(ModuleFs, 6203); - public static Result.Base UnsupportedOperation { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6300, 6399); } - public static Result.Base SubStorageNotResizable => new Result.Base(ModuleFs, 6302); - public static Result.Base SubStorageNotResizableMiddleOfFile => new Result.Base(ModuleFs, 6303); - public static Result.Base UnsupportedOperationInMemoryStorageSetSize => new Result.Base(ModuleFs, 6304); - public static Result.Base UnsupportedOperationInFileStorageOperateRange => new Result.Base(ModuleFs, 6306); - public static Result.Base UnsupportedOperationInAesCtrExStorageWrite => new Result.Base(ModuleFs, 6310); - public static Result.Base UnsupportedOperationInHierarchicalIvfcStorageSetSize => new Result.Base(ModuleFs, 6316); - public static Result.Base UnsupportedOperationInIndirectStorageWrite => new Result.Base(ModuleFs, 6324); - public static Result.Base UnsupportedOperationInIndirectStorageSetSize => new Result.Base(ModuleFs, 6325); - public static Result.Base UnsupportedOperationInRoGameCardStorageWrite => new Result.Base(ModuleFs, 6350); - public static Result.Base UnsupportedOperationInRoGameCardStorageSetSize => new Result.Base(ModuleFs, 6351); - public static Result.Base UnsupportedOperationInConcatFsQueryEntry => new Result.Base(ModuleFs, 6359); - public static Result.Base UnsupportedOperationModifyRomFsFileSystem => new Result.Base(ModuleFs, 6364); - public static Result.Base UnsupportedOperationRomFsFileSystemGetSpace => new Result.Base(ModuleFs, 6366); - public static Result.Base UnsupportedOperationModifyRomFsFile => new Result.Base(ModuleFs, 6367); - public static Result.Base UnsupportedOperationModifyReadOnlyFileSystem => new Result.Base(ModuleFs, 6369); - public static Result.Base UnsupportedOperationReadOnlyFileSystemGetSpace => new Result.Base(ModuleFs, 6371); - public static Result.Base UnsupportedOperationModifyReadOnlyFile => new Result.Base(ModuleFs, 6372); - public static Result.Base UnsupportedOperationModifyPartitionFileSystem => new Result.Base(ModuleFs, 6374); - public static Result.Base UnsupportedOperationInPartitionFileSetSize => new Result.Base(ModuleFs, 6376); - public static Result.Base UnsupportedOperationIdInPartitionFileSystem => new Result.Base(ModuleFs, 6377); - public static Result.Base PermissionDenied { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6400, 6449); } - public static Result.Base ExternalKeyAlreadyRegistered => new Result.Base(ModuleFs, 6452); - public static Result.Base WriteStateUnflushed => new Result.Base(ModuleFs, 6454); - public static Result.Base WriteModeFileNotClosed => new Result.Base(ModuleFs, 6457); - public static Result.Base AllocatorAlignmentViolation => new Result.Base(ModuleFs, 6461); - public static Result.Base UserNotExist => new Result.Base(ModuleFs, 6465); + public static Result.Base InvalidArgument { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6001, 6199); } + public static Result.Base InvalidPath { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6002, 6029); } + public static Result.Base TooLongPath => new Result.Base(ModuleFs, 6003); + public static Result.Base InvalidCharacter => new Result.Base(ModuleFs, 6004); + public static Result.Base InvalidPathFormat => new Result.Base(ModuleFs, 6005); + public static Result.Base DirectoryUnobtainable => new Result.Base(ModuleFs, 6006); + public static Result.Base NotNormalized => new Result.Base(ModuleFs, 6007); + + public static Result.Base InvalidPathForOperation { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6030, 6059); } + public static Result.Base DirectoryNotDeletable => new Result.Base(ModuleFs, 6031); + public static Result.Base DestinationIsSubPathOfSource => new Result.Base(ModuleFs, 6032); + public static Result.Base PathNotFoundInSaveDataFileTable => new Result.Base(ModuleFs, 6033); + public static Result.Base DifferentDestFileSystem => new Result.Base(ModuleFs, 6034); + + public static Result.Base InvalidOffset => new Result.Base(ModuleFs, 6061); + public static Result.Base InvalidSize => new Result.Base(ModuleFs, 6062); + public static Result.Base NullArgument => new Result.Base(ModuleFs, 6063); + public static Result.Base InvalidMountName => new Result.Base(ModuleFs, 6065); + public static Result.Base ExtensionSizeTooLarge => new Result.Base(ModuleFs, 6066); + public static Result.Base ExtensionSizeInvalid => new Result.Base(ModuleFs, 6067); + public static Result.Base ReadOldSaveDataInfoReader => new Result.Base(ModuleFs, 6068); + + public static Result.Base InvalidEnumValue { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6080, 6099); } + public static Result.Base InvalidSaveDataState => new Result.Base(ModuleFs, 6081); + public static Result.Base InvalidSaveDataSpaceId => new Result.Base(ModuleFs, 6082); + + public static Result.Base InvalidOperationForOpenMode { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6200, 6299); } + public static Result.Base FileExtensionWithoutOpenModeAllowAppend => new Result.Base(ModuleFs, 6201); + public static Result.Base InvalidOpenModeForRead => new Result.Base(ModuleFs, 6202); + public static Result.Base InvalidOpenModeForWrite => new Result.Base(ModuleFs, 6203); + + public static Result.Base UnsupportedOperation { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6300, 6399); } + public static Result.Base SubStorageNotResizable => new Result.Base(ModuleFs, 6302); + public static Result.Base SubStorageNotResizableMiddleOfFile => new Result.Base(ModuleFs, 6303); + public static Result.Base UnsupportedOperationInMemoryStorageSetSize => new Result.Base(ModuleFs, 6304); + public static Result.Base UnsupportedOperationInFileStorageOperateRange => new Result.Base(ModuleFs, 6306); + public static Result.Base UnsupportedOperationInAesCtrExStorageWrite => new Result.Base(ModuleFs, 6310); + public static Result.Base UnsupportedOperationInHierarchicalIvfcStorageSetSize => new Result.Base(ModuleFs, 6316); + public static Result.Base UnsupportedOperationInIndirectStorageWrite => new Result.Base(ModuleFs, 6324); + public static Result.Base UnsupportedOperationInIndirectStorageSetSize => new Result.Base(ModuleFs, 6325); + public static Result.Base UnsupportedOperationInRoGameCardStorageWrite => new Result.Base(ModuleFs, 6350); + public static Result.Base UnsupportedOperationInRoGameCardStorageSetSize => new Result.Base(ModuleFs, 6351); + public static Result.Base UnsupportedOperationInConcatFsQueryEntry => new Result.Base(ModuleFs, 6359); + public static Result.Base UnsupportedOperationModifyRomFsFileSystem => new Result.Base(ModuleFs, 6364); + public static Result.Base UnsupportedOperationRomFsFileSystemGetSpace => new Result.Base(ModuleFs, 6366); + public static Result.Base UnsupportedOperationModifyRomFsFile => new Result.Base(ModuleFs, 6367); + public static Result.Base UnsupportedOperationModifyReadOnlyFileSystem => new Result.Base(ModuleFs, 6369); + public static Result.Base UnsupportedOperationReadOnlyFileSystemGetSpace => new Result.Base(ModuleFs, 6371); + public static Result.Base UnsupportedOperationModifyReadOnlyFile => new Result.Base(ModuleFs, 6372); + public static Result.Base UnsupportedOperationModifyPartitionFileSystem => new Result.Base(ModuleFs, 6374); + public static Result.Base UnsupportedOperationInPartitionFileSetSize => new Result.Base(ModuleFs, 6376); + public static Result.Base UnsupportedOperationIdInPartitionFileSystem => new Result.Base(ModuleFs, 6377); + + public static Result.Base PermissionDenied { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6400, 6449); } + + public static Result.Base ExternalKeyAlreadyRegistered => new Result.Base(ModuleFs, 6452); + public static Result.Base WriteStateUnflushed => new Result.Base(ModuleFs, 6454); + public static Result.Base WriteModeFileNotClosed => new Result.Base(ModuleFs, 6457); + public static Result.Base AllocatorAlignmentViolation => new Result.Base(ModuleFs, 6461); + public static Result.Base UserNotExist => new Result.Base(ModuleFs, 6465); + public static Result.Base EntryNotFound { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6600, 6699); } + public static Result.Base OutOfResource { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6700, 6799); } - public static Result.Base MappingTableFull => new Result.Base(ModuleFs, 6706); - public static Result.Base AllocationTableInsufficientFreeBlocks => new Result.Base(ModuleFs, 6707); - public static Result.Base OpenCountLimit => new Result.Base(ModuleFs, 6709); + public static Result.Base MappingTableFull => new Result.Base(ModuleFs, 6706); + public static Result.Base AllocationTableInsufficientFreeBlocks => new Result.Base(ModuleFs, 6707); + public static Result.Base OpenCountLimit => new Result.Base(ModuleFs, 6709); + public static Result.Base MappingFailed { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6800, 6899); } - public static Result.Base RemapStorageMapFull => new Result.Base(ModuleFs, 6811); + public static Result.Base RemapStorageMapFull => new Result.Base(ModuleFs, 6811); + public static Result.Base BadState { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => new Result.Base(ModuleFs, 6900, 6999); } - public static Result.Base SubStorageNotInitialized => new Result.Base(ModuleFs, 6902); - public static Result.Base NotMounted => new Result.Base(ModuleFs, 6905); - public static Result.Base SaveDataIsExtending => new Result.Base(ModuleFs, 6906); + public static Result.Base SubStorageNotInitialized => new Result.Base(ModuleFs, 6902); + public static Result.Base NotMounted => new Result.Base(ModuleFs, 6905); + public static Result.Base SaveDataIsExtending => new Result.Base(ModuleFs, 6906); } } diff --git a/src/LibHac/Result.cs b/src/LibHac/Result.cs index a189c463..f4e49af4 100644 --- a/src/LibHac/Result.cs +++ b/src/LibHac/Result.cs @@ -233,8 +233,8 @@ namespace LibHac public Base(int module, int descriptionStart, int descriptionEnd) { Debug.Assert(ModuleBegin <= module && module < ModuleEnd, "Invalid Module"); - Debug.Assert(DescriptionBegin <= descriptionStart && descriptionStart < DescriptionEnd, "Invalid Description"); - Debug.Assert(DescriptionBegin <= descriptionEnd && descriptionEnd < DescriptionEnd, "Invalid Description"); + Debug.Assert(DescriptionBegin <= descriptionStart && descriptionStart < DescriptionEnd, "Invalid Description Start"); + Debug.Assert(DescriptionBegin <= descriptionEnd && descriptionEnd < DescriptionEnd, "Invalid Description End"); Debug.Assert(descriptionStart <= descriptionEnd, "descriptionStart must be <= descriptionEnd"); _value = SetBitsValueLong(module, ModuleBitsOffset, ModuleBitsCount) |