Support HomeBrew Loader (#577)

* Make it possibles to load hb-loader and hb-menu

One issue remains with hb-menu homebrew icons because of SIMD issues
(libjpeg-turbo related) and netloader doesn't work.

* Implement GetApplicationControlData

* Fix shared fonts for NSO/NRO

* Add homebrew NRO romfs support

This readd the NRO support by parsing the ASET header

* Address comments about HomebrewRomFs

* override Dispose in homebrew romfs stream

* Use a struct for file timestamp

* Simplify positional increments in GetApplicationControlData

* Address comments

* improve readability of the memory permission check in SetProcessMemoryPermission

* Fix previous broken check

* Add address space checks in SetProcessMemoryPermission
This commit is contained in:
Thomas Guillemard 2019-02-14 01:44:39 +01:00 committed by jduncanator
parent 7e9f555574
commit b126ea48c6
17 changed files with 633 additions and 17 deletions

View file

@ -23,9 +23,10 @@ namespace Ryujinx.HLE.HOS.Services.Sm
{
_commands = new Dictionary<int, ServiceProcessRequest>
{
{ 0, Initialize },
{ 1, GetService },
{ 2, RegisterService }
{ 0, Initialize },
{ 1, GetService },
{ 2, RegisterService },
{ 3, UnregisterService }
};
_registeredServices = new ConcurrentDictionary<string, KPort>();
@ -128,6 +129,36 @@ namespace Ryujinx.HLE.HOS.Services.Sm
return 0;
}
public long UnregisterService(ServiceCtx context)
{
if (!_isInitialized)
{
return ErrorCode.MakeError(ErrorModule.Sm, SmErr.NotInitialized);
}
long namePosition = context.RequestData.BaseStream.Position;
string name = ReadName(context);
context.RequestData.BaseStream.Seek(namePosition + 8, SeekOrigin.Begin);
bool isLight = (context.RequestData.ReadInt32() & 1) != 0;
int maxSessions = context.RequestData.ReadInt32();
if (name == string.Empty)
{
return ErrorCode.MakeError(ErrorModule.Sm, SmErr.InvalidName);
}
if (!_registeredServices.TryRemove(name, out _))
{
return ErrorCode.MakeError(ErrorModule.Sm, SmErr.NotRegistered);
}
return 0;
}
private static string ReadName(ServiceCtx context)
{
string name = string.Empty;