From e263c70f0961cf63bd0ded8681caf92ee9ee8837 Mon Sep 17 00:00:00 2001 From: Sajid Anwar Date: Fri, 15 Jun 2018 10:21:33 -0700 Subject: [PATCH] Use existing "GetBufferType0x21" for certain BSD socket methods --- Ryujinx.HLE/OsHle/Ipc/IpcMessage.cs | 36 +++++++++++------------ Ryujinx.HLE/OsHle/Services/Bsd/IClient.cs | 26 +++++----------- 2 files changed, 25 insertions(+), 37 deletions(-) diff --git a/Ryujinx.HLE/OsHle/Ipc/IpcMessage.cs b/Ryujinx.HLE/OsHle/Ipc/IpcMessage.cs index 4e648aec9..7ed8d9b8b 100644 --- a/Ryujinx.HLE/OsHle/Ipc/IpcMessage.cs +++ b/Ryujinx.HLE/OsHle/Ipc/IpcMessage.cs @@ -174,39 +174,39 @@ namespace Ryujinx.HLE.OsHle.Ipc return 0; } - public (long Position, long Size) GetBufferType0x21() + public (long Position, long Size) GetBufferType0x21(int Index = 0) { - if (PtrBuff.Count != 0 && - PtrBuff[0].Position != 0 && - PtrBuff[0].Size != 0) + if (PtrBuff.Count != 0 && + PtrBuff[Index].Position != 0 && + PtrBuff[Index].Size != 0) { - return (PtrBuff[0].Position, PtrBuff[0].Size); + return (PtrBuff[Index].Position, PtrBuff[Index].Size); } - if (SendBuff.Count != 0 && - SendBuff[0].Position != 0 && - SendBuff[0].Size != 0) + if (SendBuff.Count != 0 && + SendBuff[Index].Position != 0 && + SendBuff[Index].Size != 0) { - return (SendBuff[0].Position, SendBuff[0].Size); + return (SendBuff[Index].Position, SendBuff[Index].Size); } return (0, 0); } - public (long Position, long Size) GetBufferType0x22() + public (long Position, long Size) GetBufferType0x22(int Index = 0) { - if (RecvListBuff.Count != 0 && - RecvListBuff[0].Position != 0 && - RecvListBuff[0].Size != 0) + if (RecvListBuff.Count != 0 && + RecvListBuff[Index].Position != 0 && + RecvListBuff[Index].Size != 0) { - return (RecvListBuff[0].Position, RecvListBuff[0].Size); + return (RecvListBuff[Index].Position, RecvListBuff[Index].Size); } - if (ReceiveBuff.Count != 0 && - ReceiveBuff[0].Position != 0 && - ReceiveBuff[0].Size != 0) + if (ReceiveBuff.Count != 0 && + ReceiveBuff[Index].Position != 0 && + ReceiveBuff[Index].Size != 0) { - return (ReceiveBuff[0].Position, ReceiveBuff[0].Size); + return (ReceiveBuff[Index].Position, ReceiveBuff[Index].Size); } return (0, 0); diff --git a/Ryujinx.HLE/OsHle/Services/Bsd/IClient.cs b/Ryujinx.HLE/OsHle/Services/Bsd/IClient.cs index 98b4b2988..439a54005 100644 --- a/Ryujinx.HLE/OsHle/Services/Bsd/IClient.cs +++ b/Ryujinx.HLE/OsHle/Services/Bsd/IClient.cs @@ -180,7 +180,8 @@ namespace Ryujinx.HLE.OsHle.Services.Bsd byte[] SentBuffer = Context.Memory.ReadBytes(Context.Request.SendBuff[0].Position, Context.Request.SendBuff[0].Size); - byte[] AddressBuffer = ReadSmartBuffer(Context, 1); + (long AddressPosition, long AddressSize) = Context.Request.GetBufferType0x21(Index: 1); + byte[] AddressBuffer = Context.Memory.ReadBytes(AddressPosition, AddressSize); if (!Sockets[SocketId].Handle.Connected) { @@ -284,8 +285,9 @@ namespace Ryujinx.HLE.OsHle.Services.Bsd public long Bind(ServiceCtx Context) { int SocketId = Context.RequestData.ReadInt32(); - - byte[] AddressBuffer = ReadSmartBuffer(Context, 0); + + (long AddressPosition, long AddressSize) = Context.Request.GetBufferType0x21(); + byte[] AddressBuffer = Context.Memory.ReadBytes(AddressPosition, AddressSize); try { @@ -308,7 +310,8 @@ namespace Ryujinx.HLE.OsHle.Services.Bsd { int SocketId = Context.RequestData.ReadInt32(); - byte[] AddressBuffer = ReadSmartBuffer(Context, 0); + (long AddressPosition, long AddressSize) = Context.Request.GetBufferType0x21(); + byte[] AddressBuffer = Context.Memory.ReadBytes(AddressPosition, AddressSize); try { @@ -423,21 +426,6 @@ namespace Ryujinx.HLE.OsHle.Services.Bsd } } - private byte[] ReadSmartBuffer(ServiceCtx Context, int Index) - { - if (Context.Request.SendBuff[Index].Position != 0 && - Context.Request.SendBuff[Index].Size != 0) - { - return Context.Memory.ReadBytes(Context.Request.SendBuff[Index].Position, - Context.Request.SendBuff[Index].Size); - } - else - { - return Context.Memory.ReadBytes(Context.Request.PtrBuff[Index].Position, - Context.Request.PtrBuff[Index].Size); - } - } - private int Get16(byte[] Data, int Address) { return