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() { }
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)]
// 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;