hos: Cleanup the project (#2634)
* hos: Cleanup the project Since a lot of changes has been done on the HOS project, there are some leftover here and there, or class just used in one service, things at wrong places, and more. This PR fixes that, additionnally to that, I've realigned some vars because I though it make the code more readable. * Address gdkchan feedback * addresses Thog feedback * Revert ElfSymbol
This commit is contained in:
parent
3f2486342b
commit
5d08e9b495
36 changed files with 261 additions and 382 deletions
|
@ -9,7 +9,6 @@ using Ryujinx.Audio.Output;
|
|||
using Ryujinx.Audio.Renderer.Device;
|
||||
using Ryujinx.Audio.Renderer.Server;
|
||||
using Ryujinx.HLE.FileSystem.Content;
|
||||
using Ryujinx.HLE.HOS.Font;
|
||||
using Ryujinx.HLE.HOS.Kernel;
|
||||
using Ryujinx.HLE.HOS.Kernel.Memory;
|
||||
using Ryujinx.HLE.HOS.Kernel.Process;
|
||||
|
@ -25,6 +24,7 @@ using Ryujinx.HLE.HOS.Services.Nfc.Nfp.NfpManager;
|
|||
using Ryujinx.HLE.HOS.Services.Nv;
|
||||
using Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrl;
|
||||
using Ryujinx.HLE.HOS.Services.Pcv.Bpc;
|
||||
using Ryujinx.HLE.HOS.Services.Sdb.Pl;
|
||||
using Ryujinx.HLE.HOS.Services.Settings;
|
||||
using Ryujinx.HLE.HOS.Services.Sm;
|
||||
using Ryujinx.HLE.HOS.Services.SurfaceFlinger;
|
||||
|
@ -87,11 +87,10 @@ namespace Ryujinx.HLE.HOS
|
|||
|
||||
internal KTransferMemory AppletCaptureBufferTransfer { get; private set; }
|
||||
|
||||
internal SharedFontManager Font { get; private set; }
|
||||
|
||||
internal AccountManager AccountManager { get; private set; }
|
||||
internal ContentManager ContentManager { get; private set; }
|
||||
internal CaptureManager CaptureManager { get; private set; }
|
||||
internal SharedFontManager SharedFontManager { get; private set; }
|
||||
internal AccountManager AccountManager { get; private set; }
|
||||
internal ContentManager ContentManager { get; private set; }
|
||||
internal CaptureManager CaptureManager { get; private set; }
|
||||
|
||||
internal KEvent VsyncEvent { get; private set; }
|
||||
|
||||
|
@ -175,15 +174,14 @@ namespace Ryujinx.HLE.HOS
|
|||
|
||||
AppletState.SetFocus(true);
|
||||
|
||||
Font = new SharedFontManager(device, fontStorage);
|
||||
|
||||
VsyncEvent = new KEvent(KernelContext);
|
||||
|
||||
DisplayResolutionChangeEvent = new KEvent(KernelContext);
|
||||
|
||||
AccountManager = device.Configuration.AccountManager;
|
||||
ContentManager = device.Configuration.ContentManager;
|
||||
CaptureManager = new CaptureManager(device);
|
||||
SharedFontManager = new SharedFontManager(device, fontStorage);
|
||||
AccountManager = device.Configuration.AccountManager;
|
||||
ContentManager = device.Configuration.ContentManager;
|
||||
CaptureManager = new CaptureManager(device);
|
||||
|
||||
LibHacHorizonManager = device.Configuration.LibHacHorizonManager;
|
||||
|
||||
|
|
|
@ -16,16 +16,15 @@ namespace Ryujinx.HLE.HOS
|
|||
public class LibHacHorizonManager
|
||||
{
|
||||
private LibHac.Horizon Server { get; set; }
|
||||
public HorizonClient RyujinxClient { get; private set; }
|
||||
|
||||
public HorizonClient RyujinxClient { get; private set; }
|
||||
public HorizonClient ApplicationClient { get; private set; }
|
||||
|
||||
public HorizonClient AccountClient { get; private set; }
|
||||
public HorizonClient AmClient { get; private set; }
|
||||
public HorizonClient BcatClient { get; private set; }
|
||||
public HorizonClient FsClient { get; private set; }
|
||||
public HorizonClient NsClient { get; private set; }
|
||||
public HorizonClient SdbClient { get; private set; }
|
||||
public HorizonClient AccountClient { get; private set; }
|
||||
public HorizonClient AmClient { get; private set; }
|
||||
public HorizonClient BcatClient { get; private set; }
|
||||
public HorizonClient FsClient { get; private set; }
|
||||
public HorizonClient NsClient { get; private set; }
|
||||
public HorizonClient SdbClient { get; private set; }
|
||||
|
||||
internal LibHacIReader ArpIReader { get; private set; }
|
||||
|
||||
|
@ -49,8 +48,7 @@ namespace Ryujinx.HLE.HOS
|
|||
|
||||
public void InitializeBcatServer()
|
||||
{
|
||||
BcatClient = Server.CreateHorizonClient(new ProgramLocation(SystemProgramId.Bcat, StorageId.BuiltInSystem),
|
||||
BcatFsPermissions);
|
||||
BcatClient = Server.CreateHorizonClient(new ProgramLocation(SystemProgramId.Bcat, StorageId.BuiltInSystem), BcatFsPermissions);
|
||||
|
||||
_ = new BcatServer(BcatClient);
|
||||
}
|
||||
|
@ -66,23 +64,15 @@ namespace Ryujinx.HLE.HOS
|
|||
|
||||
public void InitializeSystemClients()
|
||||
{
|
||||
AccountClient = Server.CreateHorizonClient(new ProgramLocation(SystemProgramId.Account, StorageId.BuiltInSystem),
|
||||
AccountFsPermissions);
|
||||
|
||||
AmClient = Server.CreateHorizonClient(new ProgramLocation(SystemProgramId.Am, StorageId.BuiltInSystem),
|
||||
AmFsPermissions);
|
||||
|
||||
NsClient = Server.CreateHorizonClient(new ProgramLocation(SystemProgramId.Ns, StorageId.BuiltInSystem),
|
||||
NsFsPermissions);
|
||||
|
||||
SdbClient = Server.CreateHorizonClient(new ProgramLocation(SystemProgramId.Sdb, StorageId.BuiltInSystem),
|
||||
SdbFacData, SdbFacDescriptor);
|
||||
AccountClient = Server.CreateHorizonClient(new ProgramLocation(SystemProgramId.Account, StorageId.BuiltInSystem), AccountFsPermissions);
|
||||
AmClient = Server.CreateHorizonClient(new ProgramLocation(SystemProgramId.Am, StorageId.BuiltInSystem), AmFsPermissions);
|
||||
NsClient = Server.CreateHorizonClient(new ProgramLocation(SystemProgramId.Ns, StorageId.BuiltInSystem), NsFsPermissions);
|
||||
SdbClient = Server.CreateHorizonClient(new ProgramLocation(SystemProgramId.Sdb, StorageId.BuiltInSystem), SdbFacData, SdbFacDescriptor);
|
||||
}
|
||||
|
||||
public void InitializeApplicationClient(ProgramId programId, in Npdm npdm)
|
||||
{
|
||||
ApplicationClient = Server.CreateHorizonClient(new ProgramLocation(programId, StorageId.BuiltInUser),
|
||||
npdm.FsAccessControlData, npdm.FsAccessControlDescriptor);
|
||||
ApplicationClient = Server.CreateHorizonClient(new ProgramLocation(programId, StorageId.BuiltInUser), npdm.FsAccessControlData, npdm.FsAccessControlDescriptor);
|
||||
}
|
||||
|
||||
// This function was added to avoid errors that come from a user's keys or SD encryption seed changing.
|
||||
|
@ -147,4 +137,4 @@ namespace Ryujinx.HLE.HOS
|
|||
0x01, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -8,32 +8,32 @@ namespace Ryujinx.HLE.HOS
|
|||
{
|
||||
class ServiceCtx
|
||||
{
|
||||
public Switch Device { get; }
|
||||
public KProcess Process { get; }
|
||||
public IVirtualMemoryManager Memory { get; }
|
||||
public KThread Thread { get; }
|
||||
public IpcMessage Request { get; }
|
||||
public IpcMessage Response { get; }
|
||||
public BinaryReader RequestData { get; }
|
||||
public BinaryWriter ResponseData { get; }
|
||||
public Switch Device { get; }
|
||||
public KProcess Process { get; }
|
||||
public IVirtualMemoryManager Memory { get; }
|
||||
public KThread Thread { get; }
|
||||
public IpcMessage Request { get; }
|
||||
public IpcMessage Response { get; }
|
||||
public BinaryReader RequestData { get; }
|
||||
public BinaryWriter ResponseData { get; }
|
||||
|
||||
public ServiceCtx(
|
||||
Switch device,
|
||||
KProcess process,
|
||||
Switch device,
|
||||
KProcess process,
|
||||
IVirtualMemoryManager memory,
|
||||
KThread thread,
|
||||
IpcMessage request,
|
||||
IpcMessage response,
|
||||
BinaryReader requestData,
|
||||
BinaryWriter responseData)
|
||||
KThread thread,
|
||||
IpcMessage request,
|
||||
IpcMessage response,
|
||||
BinaryReader requestData,
|
||||
BinaryWriter responseData)
|
||||
{
|
||||
Device = device;
|
||||
Process = process;
|
||||
Memory = memory;
|
||||
Thread = thread;
|
||||
Request = request;
|
||||
Response = response;
|
||||
RequestData = requestData;
|
||||
Device = device;
|
||||
Process = process;
|
||||
Memory = memory;
|
||||
Thread = thread;
|
||||
Request = request;
|
||||
Response = response;
|
||||
RequestData = requestData;
|
||||
ResponseData = responseData;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,8 +53,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro
|
|||
return ResultCode.InvalidAddress;
|
||||
}
|
||||
|
||||
StructReader reader = new StructReader(_owner.CpuMemory, nrrAddress);
|
||||
NrrHeader header = reader.Read<NrrHeader>();
|
||||
NrrHeader header = _owner.CpuMemory.Read<NrrHeader>(nrrAddress);
|
||||
|
||||
if (header.Magic != NrrMagic)
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using Ryujinx.HLE.HOS.Font;
|
||||
using Ryujinx.HLE.HOS.Ipc;
|
||||
using Ryujinx.HLE.HOS.Kernel.Common;
|
||||
using Ryujinx.HLE.HOS.Services.Sdb.Pl.Types;
|
||||
using System;
|
||||
|
||||
namespace Ryujinx.HLE.HOS.Services.Sdb.Pl
|
||||
|
@ -43,7 +43,7 @@ namespace Ryujinx.HLE.HOS.Services.Sdb.Pl
|
|||
{
|
||||
SharedFontType fontType = (SharedFontType)context.RequestData.ReadInt32();
|
||||
|
||||
context.ResponseData.Write(context.Device.System.Font.GetFontSize(fontType));
|
||||
context.ResponseData.Write(context.Device.System.SharedFontManager.GetFontSize(fontType));
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ namespace Ryujinx.HLE.HOS.Services.Sdb.Pl
|
|||
{
|
||||
SharedFontType fontType = (SharedFontType)context.RequestData.ReadInt32();
|
||||
|
||||
context.ResponseData.Write(context.Device.System.Font.GetSharedMemoryAddressOffset(fontType));
|
||||
context.ResponseData.Write(context.Device.System.SharedFontManager.GetSharedMemoryAddressOffset(fontType));
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ namespace Ryujinx.HLE.HOS.Services.Sdb.Pl
|
|||
// GetSharedMemoryNativeHandle() -> handle<copy>
|
||||
public ResultCode GetSharedMemoryNativeHandle(ServiceCtx context)
|
||||
{
|
||||
context.Device.System.Font.EnsureInitialized(context.Device.System.ContentManager);
|
||||
context.Device.System.SharedFontManager.EnsureInitialized(context.Device.System.ContentManager);
|
||||
|
||||
if (_fontSharedMemHandle == 0)
|
||||
{
|
||||
|
@ -131,8 +131,8 @@ namespace Ryujinx.HLE.HOS.Services.Sdb.Pl
|
|||
}
|
||||
|
||||
context.Memory.Write(typesPosition + offset, (int)fontType);
|
||||
context.Memory.Write(offsetsPosition + offset, context.Device.System.Font.GetSharedMemoryAddressOffset(fontType));
|
||||
context.Memory.Write(fontSizeBufferPosition + offset, context.Device.System.Font.GetFontSize(fontType));
|
||||
context.Memory.Write(offsetsPosition + offset, context.Device.System.SharedFontManager.GetSharedMemoryAddressOffset(fontType));
|
||||
context.Memory.Write(fontSizeBufferPosition + offset, context.Device.System.SharedFontManager.GetFontSize(fontType));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -7,19 +7,20 @@ using Ryujinx.HLE.Exceptions;
|
|||
using Ryujinx.HLE.FileSystem;
|
||||
using Ryujinx.HLE.FileSystem.Content;
|
||||
using Ryujinx.HLE.HOS.Kernel.Memory;
|
||||
using Ryujinx.HLE.HOS.Services.Sdb.Pl.Types;
|
||||
using System;
|
||||
using System.Buffers.Binary;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using static Ryujinx.HLE.Utilities.FontUtils;
|
||||
|
||||
namespace Ryujinx.HLE.HOS.Font
|
||||
namespace Ryujinx.HLE.HOS.Services.Sdb.Pl
|
||||
{
|
||||
class SharedFontManager
|
||||
{
|
||||
private readonly Switch _device;
|
||||
private static readonly uint FontKey = 0x06186249;
|
||||
private static readonly uint BFTTFMagic = 0x18029a7f;
|
||||
|
||||
private readonly Switch _device;
|
||||
private readonly SharedMemoryStorage _storage;
|
||||
|
||||
private struct FontInfo
|
||||
|
@ -42,7 +43,7 @@ namespace Ryujinx.HLE.HOS.Font
|
|||
_storage = storage;
|
||||
}
|
||||
|
||||
public void Initialize(ContentManager contentManager)
|
||||
public void Initialize()
|
||||
{
|
||||
_fontData?.Clear();
|
||||
_fontData = null;
|
||||
|
@ -59,8 +60,7 @@ namespace Ryujinx.HLE.HOS.Font
|
|||
|
||||
FontInfo CreateFont(string name)
|
||||
{
|
||||
if (contentManager.TryGetFontTitle(name, out ulong fontTitle) &&
|
||||
contentManager.TryGetFontFilename(name, out string fontFilename))
|
||||
if (contentManager.TryGetFontTitle(name, out ulong fontTitle) && contentManager.TryGetFontFilename(name, out string fontFilename))
|
||||
{
|
||||
string contentPath = contentManager.GetInstalledContentPath(fontTitle, StorageId.NandSystem, NcaContentType.Data);
|
||||
string fontPath = _device.FileSystem.SwitchPathToSystemPath(contentPath);
|
||||
|
@ -71,8 +71,8 @@ namespace Ryujinx.HLE.HOS.Font
|
|||
|
||||
using (IStorage ncaFileStream = new LocalStorage(fontPath, FileAccess.Read, FileMode.Open))
|
||||
{
|
||||
Nca nca = new Nca(_device.System.KeySet, ncaFileStream);
|
||||
IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _device.System.FsIntegrityCheckLevel);
|
||||
Nca nca = new Nca(_device.System.KeySet, ncaFileStream);
|
||||
IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _device.System.FsIntegrityCheckLevel);
|
||||
|
||||
romfs.OpenFile(out IFile fontFile, ("/" + fontFilename).ToU8Span(), OpenMode.Read).ThrowIfFailure();
|
||||
|
||||
|
@ -122,22 +122,19 @@ namespace Ryujinx.HLE.HOS.Font
|
|||
|
||||
if (fontOffset > Horizon.FontSize)
|
||||
{
|
||||
throw new InvalidSystemResourceException(
|
||||
$"The sum of all fonts size exceed the shared memory size. " +
|
||||
$"Please make sure that the fonts don't exceed {Horizon.FontSize} bytes in total. " +
|
||||
$"(actual size: {fontOffset} bytes).");
|
||||
throw new InvalidSystemResourceException("The sum of all fonts size exceed the shared memory size. " +
|
||||
$"Please make sure that the fonts don't exceed {Horizon.FontSize} bytes in total. (actual size: {fontOffset} bytes).");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteMagicAndSize(ulong offset, int size)
|
||||
{
|
||||
const int decMagic = 0x18029a7f;
|
||||
const int key = 0x49621806;
|
||||
const int key = 0x49621806;
|
||||
|
||||
int encryptedSize = BinaryPrimitives.ReverseEndianness(size ^ key);
|
||||
|
||||
_storage.GetRef<int>(offset + 0) = decMagic;
|
||||
_storage.GetRef<int>(offset + 0) = (int)BFTTFMagic;
|
||||
_storage.GetRef<int>(offset + 4) = encryptedSize;
|
||||
}
|
||||
|
||||
|
@ -154,5 +151,29 @@ namespace Ryujinx.HLE.HOS.Font
|
|||
|
||||
return _fontData[fontType].Offset + 8;
|
||||
}
|
||||
|
||||
private static byte[] DecryptFont(Stream bfttfStream)
|
||||
{
|
||||
static uint KXor(uint data) => data ^ FontKey;
|
||||
|
||||
using (BinaryReader reader = new BinaryReader(bfttfStream))
|
||||
using (MemoryStream ttfStream = new MemoryStream())
|
||||
using (BinaryWriter output = new BinaryWriter(ttfStream))
|
||||
{
|
||||
if (KXor(reader.ReadUInt32()) != BFTTFMagic)
|
||||
{
|
||||
throw new InvalidDataException("Error: Input file is not in BFTTF format!");
|
||||
}
|
||||
|
||||
bfttfStream.Position += 4;
|
||||
|
||||
for (int i = 0; i < (bfttfStream.Length - 8) / 4; i++)
|
||||
{
|
||||
output.Write(KXor(reader.ReadUInt32()));
|
||||
}
|
||||
|
||||
return ttfStream.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
namespace Ryujinx.HLE.HOS.Font
|
||||
namespace Ryujinx.HLE.HOS.Services.Sdb.Pl.Types
|
||||
{
|
||||
public enum SharedFontType
|
||||
{
|
|
@ -1,5 +1,4 @@
|
|||
using Ryujinx.Common.Logging;
|
||||
using Ryujinx.HLE.Utilities;
|
||||
using System;
|
||||
using System.Buffers.Binary;
|
||||
using System.Collections.Generic;
|
||||
|
|
155
Ryujinx.HLE/HOS/Services/Sockets/Bsd/Types/LinuxError.cs
Normal file
155
Ryujinx.HLE/HOS/Services/Sockets/Bsd/Types/LinuxError.cs
Normal file
|
@ -0,0 +1,155 @@
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
||||
{
|
||||
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||
enum LinuxError
|
||||
{
|
||||
SUCCESS = 0,
|
||||
EPERM = 1 /* Operation not permitted */,
|
||||
ENOENT = 2 /* No such file or directory */,
|
||||
ESRCH = 3 /* No such process */,
|
||||
EINTR = 4 /* Interrupted system call */,
|
||||
EIO = 5 /* I/O error */,
|
||||
ENXIO = 6 /* No such device or address */,
|
||||
E2BIG = 7 /* Argument list too long */,
|
||||
ENOEXEC = 8 /* Exec format error */,
|
||||
EBADF = 9 /* Bad file number */,
|
||||
ECHILD = 10 /* No child processes */,
|
||||
EAGAIN = 11 /* Try again */,
|
||||
ENOMEM = 12 /* Out of memory */,
|
||||
EACCES = 13 /* Permission denied */,
|
||||
EFAULT = 14 /* Bad address */,
|
||||
ENOTBLK = 15 /* Block device required */,
|
||||
EBUSY = 16 /* Device or resource busy */,
|
||||
EEXIST = 17 /* File exists */,
|
||||
EXDEV = 18 /* Cross-device link */,
|
||||
ENODEV = 19 /* No such device */,
|
||||
ENOTDIR = 20 /* Not a directory */,
|
||||
EISDIR = 21 /* Is a directory */,
|
||||
EINVAL = 22 /* Invalid argument */,
|
||||
ENFILE = 23 /* File table overflow */,
|
||||
EMFILE = 24 /* Too many open files */,
|
||||
ENOTTY = 25 /* Not a typewriter */,
|
||||
ETXTBSY = 26 /* Text file busy */,
|
||||
EFBIG = 27 /* File too large */,
|
||||
ENOSPC = 28 /* No space left on device */,
|
||||
ESPIPE = 29 /* Illegal seek */,
|
||||
EROFS = 30 /* Read-only file system */,
|
||||
EMLINK = 31 /* Too many links */,
|
||||
EPIPE = 32 /* Broken pipe */,
|
||||
EDOM = 33 /* Math argument out of domain of func */,
|
||||
ERANGE = 34 /* Math result not representable */,
|
||||
EDEADLK = 35 /* Resource deadlock would occur */,
|
||||
ENAMETOOLONG = 36 /* File name too long */,
|
||||
ENOLCK = 37 /* No record locks available */,
|
||||
|
||||
/*
|
||||
* This error code is special: arch syscall entry code will return
|
||||
* -ENOSYS if users try to call a syscall that doesn't exist. To keep
|
||||
* failures of syscalls that really do exist distinguishable from
|
||||
* failures due to attempts to use a nonexistent syscall, syscall
|
||||
* implementations should refrain from returning -ENOSYS.
|
||||
*/
|
||||
ENOSYS = 38 /* Invalid system call number */,
|
||||
ENOTEMPTY = 39 /* Directory not empty */,
|
||||
ELOOP = 40 /* Too many symbolic links encountered */,
|
||||
EWOULDBLOCK = EAGAIN /* Operation would block */,
|
||||
ENOMSG = 42 /* No message of desired type */,
|
||||
EIDRM = 43 /* Identifier removed */,
|
||||
ECHRNG = 44 /* Channel number out of range */,
|
||||
EL2NSYNC = 45 /* Level 2 not synchronized */,
|
||||
EL3HLT = 46 /* Level 3 halted */,
|
||||
EL3RST = 47 /* Level 3 reset */,
|
||||
ELNRNG = 48 /* Link number out of range */,
|
||||
EUNATCH = 49 /* Protocol driver not attached */,
|
||||
ENOCSI = 50 /* No CSI structure available */,
|
||||
EL2HLT = 51 /* Level 2 halted */,
|
||||
EBADE = 52 /* Invalid exchange */,
|
||||
EBADR = 53 /* Invalid request descriptor */,
|
||||
EXFULL = 54 /* Exchange full */,
|
||||
ENOANO = 55 /* No anode */,
|
||||
EBADRQC = 56 /* Invalid request code */,
|
||||
EBADSLT = 57 /* Invalid slot */,
|
||||
EDEADLOCK = EDEADLK,
|
||||
EBFONT = 59 /* Bad font file format */,
|
||||
ENOSTR = 60 /* Device not a stream */,
|
||||
ENODATA = 61 /* No data available */,
|
||||
ETIME = 62 /* Timer expired */,
|
||||
ENOSR = 63 /* Out of streams resources */,
|
||||
ENONET = 64 /* Machine is not on the network */,
|
||||
ENOPKG = 65 /* Package not installed */,
|
||||
EREMOTE = 66 /* Object is remote */,
|
||||
ENOLINK = 67 /* Link has been severed */,
|
||||
EADV = 68 /* Advertise error */,
|
||||
ESRMNT = 69 /* Srmount error */,
|
||||
ECOMM = 70 /* Communication error on send */,
|
||||
EPROTO = 71 /* Protocol error */,
|
||||
EMULTIHOP = 72 /* Multihop attempted */,
|
||||
EDOTDOT = 73 /* RFS specific error */,
|
||||
EBADMSG = 74 /* Not a data message */,
|
||||
EOVERFLOW = 75 /* Value too large for defined data type */,
|
||||
ENOTUNIQ = 76 /* Name not unique on network */,
|
||||
EBADFD = 77 /* File descriptor in bad state */,
|
||||
EREMCHG = 78 /* Remote address changed */,
|
||||
ELIBACC = 79 /* Can not access a needed shared library */,
|
||||
ELIBBAD = 80 /* Accessing a corrupted shared library */,
|
||||
ELIBSCN = 81 /* .lib section in a.out corrupted */,
|
||||
ELIBMAX = 82 /* Attempting to link in too many shared libraries */,
|
||||
ELIBEXEC = 83 /* Cannot exec a shared library directly */,
|
||||
EILSEQ = 84 /* Illegal byte sequence */,
|
||||
ERESTART = 85 /* Interrupted system call should be restarted */,
|
||||
ESTRPIPE = 86 /* Streams pipe error */,
|
||||
EUSERS = 87 /* Too many users */,
|
||||
ENOTSOCK = 88 /* Socket operation on non-socket */,
|
||||
EDESTADDRREQ = 89 /* Destination address required */,
|
||||
EMSGSIZE = 90 /* Message too long */,
|
||||
EPROTOTYPE = 91 /* Protocol wrong type for socket */,
|
||||
ENOPROTOOPT = 92 /* Protocol not available */,
|
||||
EPROTONOSUPPORT = 93 /* Protocol not supported */,
|
||||
ESOCKTNOSUPPORT = 94 /* Socket type not supported */,
|
||||
EOPNOTSUPP = 95 /* Operation not supported on transport endpoint */,
|
||||
EPFNOSUPPORT = 96 /* Protocol family not supported */,
|
||||
EAFNOSUPPORT = 97 /* Address family not supported by protocol */,
|
||||
EADDRINUSE = 98 /* Address already in use */,
|
||||
EADDRNOTAVAIL = 99 /* Cannot assign requested address */,
|
||||
ENETDOWN = 100 /* Network is down */,
|
||||
ENETUNREACH = 101 /* Network is unreachable */,
|
||||
ENETRESET = 102 /* Network dropped connection because of reset */,
|
||||
ECONNABORTED = 103 /* Software caused connection abort */,
|
||||
ECONNRESET = 104 /* Connection reset by peer */,
|
||||
ENOBUFS = 105 /* No buffer space available */,
|
||||
EISCONN = 106 /* Transport endpoint is already connected */,
|
||||
ENOTCONN = 107 /* Transport endpoint is not connected */,
|
||||
ESHUTDOWN = 108 /* Cannot send after transport endpoint shutdown */,
|
||||
ETOOMANYREFS = 109 /* Too many references: cannot splice */,
|
||||
ETIMEDOUT = 110 /* Connection timed out */,
|
||||
ECONNREFUSED = 111 /* Connection refused */,
|
||||
EHOSTDOWN = 112 /* Host is down */,
|
||||
EHOSTUNREACH = 113 /* No route to host */,
|
||||
EALREADY = 114 /* Operation already in progress */,
|
||||
EINPROGRESS = 115 /* Operation now in progress */,
|
||||
ESTALE = 116 /* Stale file handle */,
|
||||
EUCLEAN = 117 /* Structure needs cleaning */,
|
||||
ENOTNAM = 118 /* Not a XENIX named type file */,
|
||||
ENAVAIL = 119 /* No XENIX semaphores available */,
|
||||
EISNAM = 120 /* Is a named type file */,
|
||||
EREMOTEIO = 121 /* Remote I/O error */,
|
||||
EDQUOT = 122 /* Quota exceeded */,
|
||||
ENOMEDIUM = 123 /* No medium found */,
|
||||
EMEDIUMTYPE = 124 /* Wrong medium type */,
|
||||
ECANCELED = 125 /* Operation Canceled */,
|
||||
ENOKEY = 126 /* Required key not available */,
|
||||
EKEYEXPIRED = 127 /* Key has expired */,
|
||||
EKEYREVOKED = 128 /* Key has been revoked */,
|
||||
EKEYREJECTED = 129 /* Key was rejected by service */,
|
||||
|
||||
/* for robust mutexes */
|
||||
EOWNERDEAD = 130 /* Owner died */,
|
||||
ENOTRECOVERABLE = 131 /* State not recoverable */,
|
||||
|
||||
ERFKILL = 132 /* Operation not possible due to RF-kill */,
|
||||
|
||||
EHWPOISON = 133 /* Memory page has hardware error */
|
||||
}
|
||||
}
|
134
Ryujinx.HLE/HOS/Services/Sockets/Bsd/Types/WSAError.cs
Normal file
134
Ryujinx.HLE/HOS/Services/Sockets/Bsd/Types/WSAError.cs
Normal file
|
@ -0,0 +1,134 @@
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
||||
{
|
||||
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||
enum WsaError
|
||||
{
|
||||
/*
|
||||
* All Windows Sockets error constants are biased by WSABASEERR from
|
||||
* the "normal"
|
||||
*/
|
||||
WSABASEERR = 10000,
|
||||
|
||||
/*
|
||||
* Windows Sockets definitions of regular Microsoft C error constants
|
||||
*/
|
||||
WSAEINTR = (WSABASEERR + 4),
|
||||
WSAEBADF = (WSABASEERR + 9),
|
||||
WSAEACCES = (WSABASEERR + 13),
|
||||
WSAEFAULT = (WSABASEERR + 14),
|
||||
WSAEINVAL = (WSABASEERR + 22),
|
||||
WSAEMFILE = (WSABASEERR + 24),
|
||||
|
||||
/*
|
||||
* Windows Sockets definitions of regular Berkeley error constants
|
||||
*/
|
||||
WSAEWOULDBLOCK = (WSABASEERR + 35),
|
||||
WSAEINPROGRESS = (WSABASEERR + 36),
|
||||
WSAEALREADY = (WSABASEERR + 37),
|
||||
WSAENOTSOCK = (WSABASEERR + 38),
|
||||
WSAEDESTADDRREQ = (WSABASEERR + 39),
|
||||
WSAEMSGSIZE = (WSABASEERR + 40),
|
||||
WSAEPROTOTYPE = (WSABASEERR + 41),
|
||||
WSAENOPROTOOPT = (WSABASEERR + 42),
|
||||
WSAEPROTONOSUPPORT = (WSABASEERR + 43),
|
||||
WSAESOCKTNOSUPPORT = (WSABASEERR + 44),
|
||||
WSAEOPNOTSUPP = (WSABASEERR + 45),
|
||||
WSAEPFNOSUPPORT = (WSABASEERR + 46),
|
||||
WSAEAFNOSUPPORT = (WSABASEERR + 47),
|
||||
WSAEADDRINUSE = (WSABASEERR + 48),
|
||||
WSAEADDRNOTAVAIL = (WSABASEERR + 49),
|
||||
WSAENETDOWN = (WSABASEERR + 50),
|
||||
WSAENETUNREACH = (WSABASEERR + 51),
|
||||
WSAENETRESET = (WSABASEERR + 52),
|
||||
WSAECONNABORTED = (WSABASEERR + 53),
|
||||
WSAECONNRESET = (WSABASEERR + 54),
|
||||
WSAENOBUFS = (WSABASEERR + 55),
|
||||
WSAEISCONN = (WSABASEERR + 56),
|
||||
WSAENOTCONN = (WSABASEERR + 57),
|
||||
WSAESHUTDOWN = (WSABASEERR + 58),
|
||||
WSAETOOMANYREFS = (WSABASEERR + 59),
|
||||
WSAETIMEDOUT = (WSABASEERR + 60),
|
||||
WSAECONNREFUSED = (WSABASEERR + 61),
|
||||
WSAELOOP = (WSABASEERR + 62),
|
||||
WSAENAMETOOLONG = (WSABASEERR + 63),
|
||||
WSAEHOSTDOWN = (WSABASEERR + 64),
|
||||
WSAEHOSTUNREACH = (WSABASEERR + 65),
|
||||
WSAENOTEMPTY = (WSABASEERR + 66),
|
||||
WSAEPROCLIM = (WSABASEERR + 67),
|
||||
WSAEUSERS = (WSABASEERR + 68),
|
||||
WSAEDQUOT = (WSABASEERR + 69),
|
||||
WSAESTALE = (WSABASEERR + 70),
|
||||
WSAEREMOTE = (WSABASEERR + 71),
|
||||
|
||||
/*
|
||||
* Extended Windows Sockets error constant definitions
|
||||
*/
|
||||
WSASYSNOTREADY = (WSABASEERR + 91),
|
||||
WSAVERNOTSUPPORTED = (WSABASEERR + 92),
|
||||
WSANOTINITIALISED = (WSABASEERR + 93),
|
||||
WSAEDISCON = (WSABASEERR + 101),
|
||||
WSAENOMORE = (WSABASEERR + 102),
|
||||
WSAECANCELLED = (WSABASEERR + 103),
|
||||
WSAEINVALIDPROCTABLE = (WSABASEERR + 104),
|
||||
WSAEINVALIDPROVIDER = (WSABASEERR + 105),
|
||||
WSAEPROVIDERFAILEDINIT = (WSABASEERR + 106),
|
||||
WSASYSCALLFAILURE = (WSABASEERR + 107),
|
||||
WSASERVICE_NOT_FOUND = (WSABASEERR + 108),
|
||||
WSATYPE_NOT_FOUND = (WSABASEERR + 109),
|
||||
WSA_E_NO_MORE = (WSABASEERR + 110),
|
||||
WSA_E_CANCELLED = (WSABASEERR + 111),
|
||||
WSAEREFUSED = (WSABASEERR + 112),
|
||||
|
||||
/*
|
||||
* Error return codes from gethostbyname() and gethostbyaddr()
|
||||
* (when using the resolver). Note that these errors are
|
||||
* retrieved via WSAGetLastError() and must therefore follow
|
||||
* the rules for avoiding clashes with error numbers from
|
||||
* specific implementations or language run-time systems.
|
||||
* For this reason the codes are based at WSABASEERR+1001.
|
||||
* Note also that [WSA]NO_ADDRESS is defined only for
|
||||
* compatibility purposes.
|
||||
*/
|
||||
|
||||
/* Authoritative Answer: Host not found */
|
||||
WSAHOST_NOT_FOUND = (WSABASEERR + 1001),
|
||||
|
||||
/* Non-Authoritative: Host not found, or SERVERFAIL */
|
||||
WSATRY_AGAIN = (WSABASEERR + 1002),
|
||||
|
||||
/* Non-recoverable errors, FORMERR, REFUSED, NOTIMP */
|
||||
WSANO_RECOVERY = (WSABASEERR + 1003),
|
||||
|
||||
/* Valid name, no data record of requested type */
|
||||
WSANO_DATA = (WSABASEERR + 1004),
|
||||
|
||||
/*
|
||||
* Define QOS related error return codes
|
||||
*
|
||||
*/
|
||||
WSA_QOS_RECEIVERS = (WSABASEERR + 1005),
|
||||
/* at least one Reserve has arrived */
|
||||
WSA_QOS_SENDERS = (WSABASEERR + 1006),
|
||||
/* at least one Path has arrived */
|
||||
WSA_QOS_NO_SENDERS = (WSABASEERR + 1007),
|
||||
/* there are no senders */
|
||||
WSA_QOS_NO_RECEIVERS = (WSABASEERR + 1008),
|
||||
/* there are no receivers */
|
||||
WSA_QOS_REQUEST_CONFIRMED = (WSABASEERR + 1009),
|
||||
/* Reserve has been confirmed */
|
||||
WSA_QOS_ADMISSION_FAILURE = (WSABASEERR + 1010),
|
||||
/* error due to lack of resources */
|
||||
WSA_QOS_POLICY_FAILURE = (WSABASEERR + 1011),
|
||||
/* rejected for administrative reasons - bad credentials */
|
||||
WSA_QOS_BAD_STYLE = (WSABASEERR + 1012),
|
||||
/* unknown or conflicting style */
|
||||
WSA_QOS_BAD_OBJECT = (WSABASEERR + 1013),
|
||||
/* problem with some part of the filterspec or providerspecific
|
||||
* buffer in general */
|
||||
WSA_QOS_TRAFFIC_CTRL_ERROR = (WSABASEERR + 1014),
|
||||
/* problem with some part of the flowspec */
|
||||
WSA_QOS_GENERIC_ERROR = (WSABASEERR + 1015)
|
||||
}
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
using Ryujinx.Common;
|
||||
using Ryujinx.Common.Utilities;
|
||||
using Ryujinx.HLE.Utilities;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue