4c2d9ff3ff
* HLE: Refactoring of ApplicationLoader * Fix SDL2 Headless * Addresses gdkchan feedback * Fixes LoadUnpackedNca RomFS loading * remove useless casting * Cleanup and fixe empty application name * Remove ProcessInfo * Fixes typo * ActiveProcess to ActiveApplication * Update check * Clean using. * Use the correct filepath when loading Homebrew.npdm * Fix NRE in ProcessResult if MetaLoader is null * Add more checks for valid processId & return success * Add missing logging statement for npdm error * Return result for LoadKip() * Move error logging out of PFS load extension method This avoids logging "Could not find Main NCA" followed by "Loading main..." when trying to start hbl. * Fix GUIs not checking load results * Fix style and formatting issues * Fix formatting and wording * gtk: Refactor LoadApplication() --------- Co-authored-by: TSR Berry <20988865+TSRBerry@users.noreply.github.com>
61 lines
1.7 KiB
C#
61 lines
1.7 KiB
C#
using LibHac.Common;
|
|
using LibHac.Fs;
|
|
using LibHac.Fs.Fsa;
|
|
using LibHac.Loader;
|
|
using LibHac.Util;
|
|
using Ryujinx.Common;
|
|
using System;
|
|
|
|
namespace Ryujinx.HLE.Loaders.Processes.Extensions
|
|
{
|
|
public static class MetaLoaderExtensions
|
|
{
|
|
public static ulong GetProgramId(this MetaLoader metaLoader)
|
|
{
|
|
metaLoader.GetNpdm(out var npdm).ThrowIfFailure();
|
|
|
|
return npdm.Aci.ProgramId.Value;
|
|
}
|
|
|
|
public static string GetProgramName(this MetaLoader metaLoader)
|
|
{
|
|
metaLoader.GetNpdm(out var npdm).ThrowIfFailure();
|
|
|
|
return StringUtils.Utf8ZToString(npdm.Meta.ProgramName);
|
|
}
|
|
|
|
public static bool IsProgram64Bit(this MetaLoader metaLoader)
|
|
{
|
|
metaLoader.GetNpdm(out var npdm).ThrowIfFailure();
|
|
|
|
return (npdm.Meta.Flags & 1) != 0;
|
|
}
|
|
|
|
public static void LoadDefault(this MetaLoader metaLoader)
|
|
{
|
|
byte[] npdmBuffer = EmbeddedResources.Read("Ryujinx.HLE/Homebrew.npdm");
|
|
|
|
metaLoader.Load(npdmBuffer).ThrowIfFailure();
|
|
}
|
|
|
|
public static void LoadFromFile(this MetaLoader metaLoader, IFileSystem fileSystem, string path = "")
|
|
{
|
|
if (string.IsNullOrEmpty(path))
|
|
{
|
|
path = ProcessConst.MainNpdmPath;
|
|
}
|
|
|
|
using var npdmFile = new UniqueRef<IFile>();
|
|
|
|
fileSystem.OpenFile(ref npdmFile.Ref, path.ToU8Span(), OpenMode.Read).ThrowIfFailure();
|
|
|
|
npdmFile.Get.GetSize(out long fileSize).ThrowIfFailure();
|
|
|
|
Span<byte> npdmBuffer = new byte[fileSize];
|
|
|
|
npdmFile.Get.Read(out _, 0, npdmBuffer).ThrowIfFailure();
|
|
|
|
metaLoader.Load(npdmBuffer).ThrowIfFailure();
|
|
}
|
|
}
|
|
} |