Fix ILogger type and size decoding
The type and size are custom encoded integer not byte. This fix issues on games that send messages longer than 127 characters.
This commit is contained in:
parent
8c85bdf2ed
commit
340a37f4aa
1 changed files with 22 additions and 2 deletions
|
@ -8,6 +8,26 @@ namespace Ryujinx.HLE.HOS.Services.Lm.LogService
|
|||
{
|
||||
public ILogger() { }
|
||||
|
||||
private int ReadEncodedInt(BinaryReader reader)
|
||||
{
|
||||
int result = 0;
|
||||
int position = 0;
|
||||
|
||||
byte encoded;
|
||||
|
||||
do
|
||||
{
|
||||
encoded = reader.ReadByte();
|
||||
|
||||
result += (encoded & 0x7F) << (7 * position);
|
||||
|
||||
position++;
|
||||
|
||||
} while ((encoded & -128) != 0);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
[Command(0)]
|
||||
// Log(buffer<unknown, 0x21>)
|
||||
public ResultCode Log(ServiceCtx context)
|
||||
|
@ -34,8 +54,8 @@ namespace Ryujinx.HLE.HOS.Services.Lm.LogService
|
|||
|
||||
while (ms.Position < ms.Length)
|
||||
{
|
||||
byte type = reader.ReadByte();
|
||||
byte size = reader.ReadByte();
|
||||
int type = ReadEncodedInt(reader);
|
||||
int size = ReadEncodedInt(reader);
|
||||
|
||||
LmLogField field = (LmLogField)type;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue