Fix ILogger type and size decoding (#842)

* 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.

* Address gdk's comments
This commit is contained in:
Thog 2019-12-08 14:35:25 +01:00 committed by GitHub
parent 8c85bdf2ed
commit d925de2d0e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -8,6 +8,26 @@ namespace Ryujinx.HLE.HOS.Services.Lm.LogService
{ {
public ILogger() { } public ILogger() { }
private static int ReadEncodedInt(BinaryReader reader)
{
int result = 0;
int position = 0;
byte encoded;
do
{
encoded = reader.ReadByte();
result += (encoded & 0x7F) << (7 * position);
position++;
} while ((encoded & 0x80) != 0);
return result;
}
[Command(0)] [Command(0)]
// Log(buffer<unknown, 0x21>) // Log(buffer<unknown, 0x21>)
public ResultCode Log(ServiceCtx context) public ResultCode Log(ServiceCtx context)
@ -34,8 +54,8 @@ namespace Ryujinx.HLE.HOS.Services.Lm.LogService
while (ms.Position < ms.Length) while (ms.Position < ms.Length)
{ {
byte type = reader.ReadByte(); int type = ReadEncodedInt(reader);
byte size = reader.ReadByte(); int size = ReadEncodedInt(reader);
LmLogField field = (LmLogField)type; LmLogField field = (LmLogField)type;